Cod sursa(job #355907)

Utilizator marinMari n marin Data 12 octombrie 2009 17:50:48
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#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;
		last = 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;
}