Pagini recente » Cod sursa (job #460774) | Cod sursa (job #260281) | Cod sursa (job #157810) | Cod sursa (job #2707773) | Cod sursa (job #352300)
Cod sursa(job #352300)
#include <stdio.h>
#include <string.h>
int N, M, D, k, i, x, ans;
char c, S[1000005];
int P[1000005];
int main()
{
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d\n", &M);
while (M--)
{
S[0] = ' ';
gets(S+1);
N = strlen(S);
P[1] = ans = 0;
for (i = 2; i < N; ++i)
{
k = P[i-1];
while (k > 0 && S[k+1] != S[i])
k = P[k];
if (S[k+1] == S[i])
k++;
P[i] = k;
D = i-P[i];
if (i % D == 0 && P[i-D] == P[i]-D || i % 2 == 0 && P[i] == i/2)
ans = i;
}
printf("%d\n", ans);
}
return 0;
}