Pagini recente » Cod sursa (job #3120864) | Istoria paginii runda/preoji2010_contest/clasament | Cod sursa (job #1802040) | Cod sursa (job #2842544) | Cod sursa (job #1844740)
#include<stdio.h>
const int MAXN = 1000005;
char v[MAXN];
int kmp[MAXN];
int t;
FILE *in, *out;
int main ()
{
in = fopen("prefix.in", "r");
out = fopen("prefix.out", "w");
fscanf(in, "%d", &t);
for(int i = 0; i < t; i++) {
fscanf(in, "%s", v + 1);
v[0] = '#';
kmp[0] = 0;
kmp[1] = 0;
int j = 2;
while(v[j] != 0) {
int poz = kmp[j - 1];
while(poz != 0 && v[j] != v[poz + 1]) {
poz = kmp[poz];
}
if(v[poz + 1] == v[j]) {
kmp[j] = poz + 1;
} else {
kmp[j] = 0;
}
//printf("%d ", kmp[j]);
j++;
}
int deafis = 0;
j = 2;
while(v[j] != 0) {
if((j % (j - kmp[j])) == 0 && kmp[j] != 0) {
//printf("j%d::kmp[j]%d || ", j, kmp[j]);
deafis = j;
}
j++;
}
/*
printf("\n");
printf("\n--\n");
*/
fprintf(out, "%d\n", deafis);
}
fclose(in);
fclose(out);
return 0;
}