Cod sursa(job #498474)

Utilizator ConsstantinTabacu Raul Consstantin Data 5 noiembrie 2010 11:19:29
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<stdio.h>
#include<string.h>

int pi[ 1000010 ],i,j,k,l,m,n,lmax,oul;
char x[ 1000010 ];

void solve(){
pi[0] = pi[1] = 0;
lmax=0;
oul = 1;
int N = strlen(x+1);
int i;
int q=0;
for(i=2;i<=N;++i)
        {while((q>0)&&(x[q+1]!=x[i]))
                q=pi[q];
        if(x[q+1]==x[i])q++;
        pi[i]=q;
		if(q &&( (q<<1 == i) ||(i %(i-q) == 0)))
			lmax = i;
			

        }
}

void afis(){
printf("%d\n",lmax);

}
void citire(){
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);

scanf("%d",&n);

for(i = 1 ; i <= n ; i++)
	{scanf("%s",x+1);
	solve();
	afis();
	}

}

int main(){
citire();
return 0;
}