Cod sursa(job #64305)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 2 iunie 2007 15:29:13
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include <stdio.h>
#define fin  "prefix.in"
#define fout "prefix.out"
#define Nmax 1000001

int N,T,bst,pi[Nmax];
char p[Nmax];

int main() {
int i,k;
	freopen(fin,"r",stdin); freopen(fout,"w",stdout);

	scanf("%d",&T);

	for (;T>0;--T) { 
		scanf("%s",p+1);
		pi[1]=0; 
		k=0; bst=0;
		for (i=2;p[i]!=(char)NULL;++i) {
			while (k>0 && p[k+1]!=p[i])
				k=pi[k];
			if ( p[k+1]==p[i])
				++k;
			pi[i]=k;
		}
		N=i-1;
		for ( i=2;i<=N;++i) {
			if ( i % ( i - pi[i] ) == 0 && pi[i] >= i/2)
				bst=i;
			//fprintf(stderr,"%d ",pi[i]);
		}
		//fprintf(stderr,"\n");
		printf("%d\n",bst);
	}
	return 0;
}