您的位置:首页 > 其它

zoj 2006 Glass Beads(字符串的最小表示模板题)

2013-10-24 21:49 309 查看
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1006

题目大意:给你一个字符串,然后让你求出最靠左的循环字符串最小表示的位置。

思路:题目没看,看别人推荐做的,一看样例,应该差不多是上面那个意思,贴贴模板就过了。。 = =
代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

char str[11111<<1];

int main()
{
int _;
scanf("%d",&_);
while(_--)
{
scanf("%s",str);
int n = strlen(str);
for(int i = 0;i < n;i++)
str[n+i] = str[i];
str[n+n] = '\0';
//puts(str);
int i = 0,j = 1,len = 0;
while(i < n && j < n)
{
if(str[i+len] == str[j+len])
{
len++;
if(len == n)
break;
}
else
{
if(str[i+len] < str[j+len])
j += len+1;
else i += len+1;
if(i == j) j++;
len = 0;
}
//printf("i = %d,j = %d,len = %d\n",i,j,len);
}
printf("%d\n",min(i,j)+1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: