Pagini recente » Cod sursa (job #2894952) | Cod sursa (job #261298) | Cod sursa (job #158076) | Cod sursa (job #2832840) | Cod sursa (job #777869)
Cod sursa(job #777869)
#include <cstdio>
#include <cstring>
using namespace std;
const int kMaxN = 1000005;
int Pi[kMaxN], L;
char S[kMaxN];
void KMP() {
Pi[1] = 0;
for (int i = 2, k = 0; S[i]; ++i) {
while (k && S[i] != S[k+1])
k = Pi[k];
k += (S[i] == S[k+1]);
Pi[i] = k;
if (i-Pi[i] <= i/2 && i%(i-Pi[i]) == 0)
L = i;
}
}
void Read() {
memset(S, 0, sizeof(S)), L = 0;
scanf("\n%s", S+1);
}
void Print() {
printf("%d\n", L);
}
int main() {
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
int T; scanf("%d", &T);
for (; T; --T) {
Read();
KMP();
Print();
}
return 0;
}