Cod sursa(job #574621)

Utilizator cnt_tstcont teste cnt_tst Data 7 aprilie 2011 12:54:09
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
//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;
}