Pagini recente » Cod sursa (job #2882064) | Cod sursa (job #44538) | Cod sursa (job #424774) | Cod sursa (job #192105) | Cod sursa (job #1478951)
#include <stdio.h>
#include <string.h>
#define MAX 1000005
int t, i, j, p[MAX], sol, lung;
char s[MAX];
void prefix(char s[]);
int main(){
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%d\n", &t);
for(i = 0; i < t; i++){
sol = 0;
memset(s, 0, MAX);
scanf("%s\n", s + 1);
lung = strlen(s + 1);
prefix(s);
for(j = lung; j >= 2; j--)
if(p[j] && j % (j - p[j]) == 0){
sol = j;
break;
}
printf("%d\n", sol);
}
return 0;
}
void prefix(char s[]){
int i, k = 0;
for(i = 2; i <= lung; i++){
while(k > 0 && s[k + 1] != s[i])
k = p[k];
if(s[k + 1] == s[i])
k++;
p[i] = k;
}
}