Pagini recente » Cod sursa (job #3213701) | Cod sursa (job #2325402) | Cod sursa (job #2454641) | Cod sursa (job #396888) | Cod sursa (job #574621)
Cod sursa(job #574621)
//prefix
#include <stdio.h>
#include <string.h>
#define DIM 2000012
char A[DIM];
int P[DIM];
int S[1011];
int dA, dB, i, k, sol, T;
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;
sol = 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;
if ((i%(i-P[i])==0) && (P[P[i]]==2*P[i]-i)) {
sol = i;
} else if (i==2*(i-P[i]) && P[i] == i/2){
sol = i;
}
}
fprintf(g,"%d\n",sol);
}
return 0;
}