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