Pagini recente » Cod sursa (job #43759) | Cod sursa (job #1168615) | Cod sursa (job #2922787) | Cod sursa (job #1212162) | Cod sursa (job #2117060)
#include <stdio.h>
#include <string.h>
static char s[1000001];
static size_t pi[1000001];
int main(void)
{
size_t t, i, q, diff, plen;
char *p, found;
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%lu", &t);
while (t--) {
p = s + 1;
fgets(p, sizeof s, stdin);
plen = strlen(p) - 1;
p[plen] = '\0';
if (plen == 0) {
t++;
continue;
}
pi[1] = 0;
q = 0;
for (i = 2; i <= plen; i++) {
while (q > 0 && s[q + 1] != s[i]) {
q = pi[q];
}
if (s[q + 1] == s[i]) {
q++;
}
pi[i] = q;
}
/*
for (i = 1; i <= plen; i++) {
fprintf(stderr, " %c", s[i]);
}
fprintf(stderr, " %lu\n", strlen(p));
for (i = 1; i <= strlen(p); i++) {
fprintf(stderr, "%3ld", pi[i]);
}
fprintf(stderr, "\n");
*/
for (i = plen; i > 0; i--) {
if (i % (i - pi[i]) == 0 && i - pi[i] < i) {
break;
}
}
printf("%lu\n", i);
}
return 0;
}