Cod sursa(job #183182)

Utilizator AndreyPAndrei Poenaru AndreyP Data 21 aprilie 2008 20:10:10
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include<stdio.h>
int t;
char c[1000010];
int pi[1000010],maxpi;
void calc_pi()
{
	int k=0,i;
	maxpi=0;
	pi[1]=0;
	for(i=2; c[i]!='\0'; i++)
	{
		while((k>0)&&(c[k+1]!=c[i]))
			k=pi[k];
		if(c[i]==c[k+1])
			k++;
		pi[i]=k;
		if(pi[i]!=0)
		{
			if(pi[i]%(i-pi[i])==0)
				maxpi=i;
		}
	}
	//for(i=1; (c[i]!='\n')&&(c[i]!='\0'); i++)
	//	printf("%d ",pi[i]);
	//printf("\n");
}
int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	int i;
	scanf("%d\n",&t);
	for(i=0; i<t; i++)
	{
		fgets(c+1,1000010,stdin);
		calc_pi();
		printf("%d\n",maxpi);
	}
	return 0;
}