Pagini recente » Cod sursa (job #2092374) | Cod sursa (job #152959) | Cod sursa (job #2891396) | Cod sursa (job #1216387) | Cod sursa (job #2482966)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int MAXN = 1000010;
char str[MAXN];
int len[MAXN], n, t;
int solve() {
int i, j, max = 0;
for (int 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;
int k = i - len[i];
if (i % k == 0 && max < i)
max = i;
}
}
return max;
}
/**int findLength() {
int max = 0;
for (int i = 1; i <= n; ++i) {
int k = i - len[i];
if (i % k == 0 && max < i && len[i])
max = i;
}
return max;
}*/
int main() {
ifstream fin("prefix.in");
ofstream fout("prefix.out");
fin >> t;
fin.get();
for (int i = 0; i < t; ++i) {
fin.getline(str + 1, MAXN);
n = strlen(str + 1);
fout << solve() << '\n';
}
return 0;
}