Cod sursa(job #447598)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 29 aprilie 2010 11:10:29
Problema Prefix Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>
#include <cstring>

#define file_in "prefix.in"
#define file_out "prefix.out"

int T,pi[1010000],rez,n;
char s[1010000];

void prefix()
{
	int i,k;
	memset(pi,0,sizeof(pi));
	k=0;
	for (i=2;i<=n;++i)
	{
		while (s[i]!=s[k+1] && k) k=pi[k];
		if (s[i]==s[k+1]) k++;
		pi[i]=k;
		if (k!=0 && i%(i-pi[i])==0) rez=i;
	}
}
		

void citire()
{
	int i;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d\n", &T);
	
	while(T--)
	{
		scanf("%s\n", s+1);
		n=strlen(s+1);
		prefix();
		
		printf("%d\n", rez);
	}
}

int main()
{
	citire();
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}