Cod sursa(job #47827)

Utilizator amadaeusLucian Boca amadaeus Data 4 aprilie 2007 00:35:34
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
// prefix - infoarena 106
#include <cstdio>
#include <cstring>
using namespace std;

#define NX 1000010

char s[ NX ];
int M, T, pi[ NX ];

void calc_pi() {
	int k, q;

	M = strlen( s ) - 1;

	for( pi[0] = k = -1, q = 1; q <= M; q++ ) {
		while( k >= 0 && s[k+1] != s[q] )
			k = pi[k];
		pi[q] = ++k;
	}
}

void rez() {
	int k;

	pi[0] = 0;
	for( k = M; k; k-- )
		if( pi[k] > 0 && ( k % ( k - pi[k] ) == 0 ) )
			break;
	printf( "%d\n", k );
}

void cit() {
	scanf( "%d\n", &T );
	s[0] = '#';
	for( ; T; T-- ) {
		gets( s+1 );
		calc_pi();
		rez();
	}
}

int main() {
	freopen( "prefix.in", "r", stdin );
	freopen( "prefix.out", "w", stdout );

	cit();

	return 0;
}