Cod sursa(job #416219)

Utilizator funkydvdIancu David Traian funkydvd Data 12 martie 2010 13:03:19
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 1000005;
int i , j , t , pi[maxn] , n , ans;
char s[maxn];
void prefix ()
{
	int i , q = 0;
	memset(pi,0,sizeof(pi));
	pi[1]=0;
	for( i = 2; i <= n ; ++i ) 
	{
		while ( q && s[q + 1] != s[i] ) q = pi[q];
		if ( s[q + 1] == s[i] ) ++q;
		pi[i] = q;
		if ( i % ( i - pi[i] ) == 0 && q ) ans = i;
	}
}
int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	scanf ("%d\n", &t);
	for (; t-- ; ) 
	{ 
		fgets ( s , maxn ,stdin);
		n = strlen(s) - 1 , ans = 0;
		for( i = n ; i >= 1 ; --i ) s[i] = s[i - 1];
		prefix();
		printf("%d\n",ans);
	}
	
	
return 0;
}