Pagini recente » Cod sursa (job #1860075) | Cod sursa (job #220830) | Cod sursa (job #1360262) | Cod sursa (job #1892433) | Cod sursa (job #574611)
Cod sursa(job #574611)
#include<stdio.h>
#include<string>
#define maxL 1000005
FILE*f=fopen("prefix.in","r");
FILE*g=fopen("prefix.out","w");
int T,L,ii,pi[maxL]; char A[maxL];
int solve () {
int Sol = 0, k = 0;
for ( int i = 2 ; i <= L ; ++i ){
while ( k > 0 && A[i] != A[k+1] )
k = pi[k];
if ( A[i] == A[k+1] )
++k;
pi[i] = k;
if ( k && !(i % ( i - k ) ) )
Sol = i;
}
return Sol;
}
int main () {
fscanf(f,"%d\n",&T);
for ( ii = 1 ; ii <= T ; ++ii ){
fscanf(f,"%s",A+1);
L = strlen(A+1);
fprintf(g,"%d\n",solve());
}
fclose(f);
fclose(g);
return 0;
}