Pagini recente » Cod sursa (job #1357981) | Cod sursa (job #3281253) | Cod sursa (job #3283878) | Cod sursa (job #2109201) | Cod sursa (job #960)
Cod sursa(job #960)
#include <stdio.h>
#include <string.h>
#define nm 1000100
#define pm 1000
int t, n, p[nm], a[nm], sol;
char s[nm];
int main()
{
int i, j, k;
char c;
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d ", &t);
for (i = 1; i <= t; ++i)
{
scanf(" %s ", &s);
n = strlen(s);
for (j = n; j > 0; --j)
s[j] = s[j - 1];
p[1] = 0;
for (k = 0, j = 2; j <= n; ++j)
{
while(k && s[k + 1] != s[j])
k = p[k];
if (s[k + 1] == s[j])
++k;
p[j] = k;
}
sol = 0;
for (j = 1; j <= n; ++j)
if ((j - p[j] == p[j]) || (j - p[j] == p[j] - p[p[j]] && a[p[j]]))
{
a[j] = 1;
sol = j;
}
else
a[j] = 0;
printf("%d\n", sol);
}
return 0;
}