hdu3746(kmp循环节)
http://acm.hdu.edu.cn/showproblem.php?pid=3746
#include<iostream>
#include<string.h>
using namespace std;
int next[200000];
char s[200000];
void getnext()
{
int i=0,j=-1;
next[0]=-1;
int len=strlen(s);
while(i<len)
{
if(j==-1||s[i]==s[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
int main()
{
int text;
scanf("%d",&text);
while(text--)
{
scanf("%s",s);
int len=strlen(s);
getnext();
if(next[len]==0)
printf("%d\n",len);
else
{
int t=len-next[len];
if(len%t==0)
printf("0\n");
else
{
printf("%d\n",t-len%t);
}
}
}
return 0;
}
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号