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;
}

 

posted @ 2013-01-02 18:47  紫忆  阅读(194)  评论(0编辑  收藏  举报