Pagini recente » Cod sursa (job #798118) | Cod sursa (job #2417579) | Cod sursa (job #1118243) | Cod sursa (job #1515734) | Cod sursa (job #87204)
Cod sursa(job #87204)
#include <cstdio>
const int maxl = 10000001;
FILE *in = fopen("prefix.in","r"), *out = fopen("prefix.out","w");
int t;
char a[maxl];
int pi[maxl];
int main()
{
fscanf(in, "%d", &t);
while ( t-- )
{
fscanf(in, "%s", a + 1);
int k = 0;
int max = 0;
for ( int i = 2; a[i]; ++i )
{
while ( k > 0 && a[k + 1] != a[i] )
k = pi[k];
if ( a[k + 1] == a[i] )
++k;
pi[i] = k;
if ( pi[i] > 0 && i % (i - pi[i]) == 0 )
max = i;
}
// int max = 0;
// for ( int i = 2; a[i]; ++i )
// if ( pi[i] > 0 && i % (i - pi[i]) == 0 )
// max = i;
fprintf(out, "%d\n", max);
}
return 0;
}