Cod sursa(job #574611)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 7 aprilie 2011 12:47:27
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include<stdio.h>
#include<string>

#define maxL 1000005

FILE*f=fopen("prefix.in","r");
FILE*g=fopen("prefix.out","w");

int T,L,ii,pi[maxL]; char A[maxL];

int solve () {
	int Sol = 0, k = 0;
	
	for ( int i = 2 ; i <= L ; ++i ){
		while ( k > 0 && A[i] != A[k+1] )
			k = pi[k];
		if ( A[i] == A[k+1] )
			++k;
		pi[i] = k;
		
		if ( k && !(i % ( i - k ) ) )
			Sol = i;
		
	}
	
	return Sol;
}

int main () {
	
	fscanf(f,"%d\n",&T);
	
	for ( ii = 1 ; ii <= T ; ++ii ){
		fscanf(f,"%s",A+1);
		L = strlen(A+1);
		fprintf(g,"%d\n",solve());
	}
	
	
	fclose(f);
	fclose(g);
	
	return 0;
}