Cod sursa(job #64311)

Utilizator crawlerPuni Andrei Paul crawler Data 2 iunie 2007 15:52:56
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.55 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;
                        if( i % ( i - pi[i] ) == 0 && pi[i]*2 >= i)
			bst=i;
		}

		printf("%d\n",bst);
	}
	return 0;
}