Cod sursa(job #408868)

Utilizator klamathixMihai Calancea klamathix Data 3 martie 2010 11:56:30
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 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));
	
	for( i = 2 , pi[1] = 0; 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);
	
	for ( scanf("%d\n",&t); 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;
}