Pagini recente » Cod sursa (job #832371) | Cod sursa (job #2073620) | Cod sursa (job #71769) | Cod sursa (job #2960912) | Cod sursa (job #2482953)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 1000010;
char str[MAXN];
int len[MAXN], n, t;
void preprocess() {
int i, j;
for (len[1] = 0, i = 2, j = 0; i <= n; ++i) {
while (j && str[j + 1] != str[i])
j = len[j];
if (str[j + 1] == str[i])
len[i] = ++j;
else
len[i] = 0;
}
}
int findLength() {
int max = 0;
for (int i = 1; i <= n; ++i) {
int k = i - len[i];
if (i / k == double(i) / k && max < i && len[i])
max = i;
}
return max;
}
/*
void print() {
for (int i = 1; i <= n; ++i)
cout << len[i] << ' ';
cout << '\n';
}*/
int main() {
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d", &t);
scanf("%c");
for (int i = 0; i < t; ++i) {
scanf("%s\n", (str + 1));
n = strlen(str + 1);
preprocess();
printf("%d\n", findLength());
}
return 0;
}