Pagini recente » Cod sursa (job #3170794) | Cod sursa (job #1612373) | Cod sursa (job #1734887) | Cod sursa (job #1594266) | Cod sursa (job #1303993)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int NMAX = 1000000 + 1;
int F[NMAX];
char s[NMAX];
void proceseaza(char pattern[]) {
F[1] = F[0] = 0;
int k = 0;
int n = strlen(pattern + 1);
for (int q = 2; q <= n; q++) {
while (k > 0 && pattern[k + 1] != pattern[q]) k = F[k];
if (pattern[k + 1] == pattern[q]) k++;
F[q] = k;
}
}
int rezolva(char a[]) {
int n = strlen(a + 1);
proceseaza(a);
for (int i = n; i >= 1; i--)
if (i % (i - F[i]) == 0 && F[i] > 0) return i;
return 0;
}
int main() {
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
int t;
scanf("%d", &t);
while (t--) {
scanf("%s", s + 1);
//cout << s + 1 << endl;
printf("%d\n", rezolva(s));
//cout << rezolva(s) << '\n';
}
}