Cod sursa(job #208551)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 17 septembrie 2008 09:59:44
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.58 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;
}