Pagini recente » Borderou de evaluare (job #214930) | Borderou de evaluare (job #2238275) | Borderou de evaluare (job #2694776) | Cod sursa (job #550316) | Cod sursa (job #47827)
Cod sursa(job #47827)
// 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;
}