Pagini recente » Cod sursa (job #2567588) | Cod sursa (job #101192) | Cod sursa (job #408151) | Cod sursa (job #2344995) | Cod sursa (job #1318091)
#include <stdio.h>
#include <stdlib.h>
#define MAXL 1000000
char sir[MAXL + 1];
int p[MAXL];
inline void kmp(int len){
int i, k = -1;
p[0] = -1;
for(i = 1; i < len; i++){
while(k > -1 && sir[i] != sir[k + 1])
k = p[k];
if(sir[i] == sir[k + 1])
k++;
p[i] = k;
}
}
inline int prefix(int len){
kmp(len);
int i, max = 0;
for(i = 1; i < len; i++){
if(p[i] > -1){
if((i + 1) % (i - p[i]) == 0){
max = i + 1;
}
}
}
return max;
}
int main(){
FILE *in = fopen("prefix.in", "r");
FILE *out = fopen("prefix.out", "w");
int t, i, len;
fscanf( in, "%d ", &t );
for ( i = 0; i < t; i++ ){
fgets( sir, MAXL + 1, in );
len = strlen(sir);
len--;
fprintf(out, "%d\n", prefix(len));
}
fclose(in);
fclose(out);
return 0;
}