Pagini recente » monthly1 | Istoria paginii runda/cgfhfjdkfyul | Cod sursa (job #1700867) | Cod sursa (job #2174552) | Cod sursa (job #352298)
Cod sursa(job #352298)
#include <stdio.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--)
{
for (S[0] = ' ', N = 1, x = scanf("%c", &c); x > 0 && 'a' <= c && c <= 'z'; S[N++] = c, x = scanf("%c", &c));
S[N] = 0;
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;
}