Pagini recente » Cod sursa (job #1819227) | Cod sursa (job #2623282) | Cod sursa (job #3144613) | Cod sursa (job #2905360) | Cod sursa (job #208551)
Cod sursa(job #208551)
#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;
}