Pagini recente » Cod sursa (job #2643873) | Cod sursa (job #2560622) | Cod sursa (job #2629315) | Cod sursa (job #103901) | Cod sursa (job #355905)
Cod sursa(job #355905)
#include <stdio.h>
#include <string.h>
#define DIM 2000002
char A[DIM];
char B[DIM];
int P[DIM];
int S[1002];
int dA, dB, i, k, sol, T, L, last;
int main(){
FILE *f = fopen("prefix.in","r");
FILE *g = fopen("prefix.out","w");
fscanf(f,"%d",&T);
for (;T;T--) {
fscanf(f,"%s",A);
for (i = dA = strlen(A); i>0; i--) {
A[i] = A[i-1];
}
P[1] = 0;
for (i=2, k=0;i<=dA;i++) {
while (A[i] != A[k+1] && k>0)
k = P[k];
if (A[i] == A[k+1]) {
k++;
P[i] = k;
} else
P[i] = 0;
L = i-P[i];
if (L && (i%L==0) && (P[i-L]==P[i]-L)) {
last = i;
} else if (i==2*L && P[i] == i/2){
last = i;
}
}
fprintf(g,"%d\n",last);
}
fclose(f);
fclose(g);
return 0;
}