Pagini recente » Cod sursa (job #44434) | Cod sursa (job #1345128) | Cod sursa (job #538126) | Cod sursa (job #669188) | Cod sursa (job #911598)
Cod sursa(job #911598)
#include <stdio.h>
#include <string.h>
using namespace std;
#define Nmax 1000005
int t, length, pi[Nmax];
char c[Nmax];
bool found;
inline int prefix(){
int k = 0;
pi[0] = 0;
for(register int i = 2; i <= length; ++i){
while(c[i] != c[k+1] && k > 0) k = pi[k];
if(c[i] == c[k+1]) ++k;
pi[i] = k;
}
}
int main(){
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
scanf("%i", &t);
for(int i = 1; i <= t; ++i){
scanf("%s", c+1);
length = strlen(c+1);
prefix();
found = false;
for(int k = length; k > 0 && !found; --k)
if(pi[k] && k%(k - pi[k]) == 0){
found = true;
printf("%i\n", k);
}
if(!found) printf("%i\n", 0);
}
fclose(stdin);
fclose(stdout);
return 0;
}