Cod sursa(job #447720)

Utilizator HoriaClementHoriaC HoriaClement Data 30 aprilie 2010 20:48:14
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 kb
#include <cstdio>
#include <cstring>

using namespace std;

#define MAX_N 1000100

char C[MAX_N];
int P[MAX_N], T;

int pi() 
{
	memset( P, 0, sizeof(P) );
	int k, i, N = strlen(C+1), mx = 0;
	for ( k=0, i=2; i<N; ++i ) {
		while ( k && C[k+1] != C[i] ) k = P[k];
		if ( C[k+1] == C[i] ) ++k;
		P[i] = k;

		if ( k && (i % (i-k) == 0) )
			mx = i;
	}
	return mx;
}

int main() 
{
	freopen( "prefix.in", "r", stdin );
	freopen( "prefix.out", "w", stdout );
	scanf("%d\n", &T);
	while ( T-- ) {
		fgets( C+1, MAX_N, stdin );
		printf( "%d\n", pi() );
	}
	return 0;
}