Pagini recente » Cod sursa (job #2988803) | Cod sursa (job #1949517) | Cod sursa (job #2944493) | Cod sursa (job #259400) | Cod sursa (job #2365815)
#include <cstdio>
#include <cstring>
#define LENGTH_MAX 1000001
char text[LENGTH_MAX];
int T, prefix[LENGTH_MAX];
void doPrefix(char* text, int textLength, int* prefix) {
int it = 1, k = 0;
prefix[0] = 0;
while (it < textLength) {
if (text[it] == text[k]) {
prefix[it++] = ++k;
} else {
if (0 < k) {
k = prefix[k - 1];
} else {
prefix[it++] = 0;
}
}
}
}
int main() {
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d", &T);
while (T--) {
scanf("%s\n", text);
int textLength = strlen(text);
doPrefix(text, textLength, prefix);
bool done = false;
for (int it = textLength - 1; 0 < it; --it) {
if (0 == (it + 1) % (it + 1 - prefix[it]) && 0 != prefix[it]) {
done = true;
printf("%d\n", it + 1);
break;
}
}
if (!done) printf("0\n");
}
return 0;
}