Cod sursa(job #193065)

Utilizator Matei14Popa-Matei Mihai Matei14 Data 2 iunie 2008 07:42:24
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.58 kb
#include<stdio.h>  
#include<string.h>
#define NMAX 1000005
long Pi[NMAX],n;
char s[NMAX];
void prefix(){
	int i,k;
	Pi[1]=0;
	for(i=2,k=0;i<=n;++i){
		while(k>0&&s[i]!=s[k+1])
			k=Pi[k];
		if(s[i]==s[k+1])
			++k;
		Pi[i]=k;
	}
}
int main(){
	int t,ans,i;
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    for(scanf("%d",&t);t>0;--t){
		scanf("%s",s+1);
		n=strlen(s+1);
		prefix();
		ans=0;
		for(i=2;i<=n;++i)
			if(Pi[i]>0&&i%(i-Pi[i])==0)
				ans=i;
		printf("%d\n",ans);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}