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;

}

 

你可能感兴趣的:(HDU)