Cod sursa(job #325139)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 19 iunie 2009 00:42:59
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include<stdio.h>
#include<string.h>
#define N 1000010
char s[N],*sp;
int t,pr[N],sol();
void read(),solve();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	scanf("%d\n",&t);sp=s+1;
}
void solve()
{
	
	for(;t;t--)printf("%d\n",sol());
}
int sol()
{
	scanf("%s",sp);
	int ret=0,k=0,L=strlen(sp)+1;
	if(L==1)return 0;
	k=0;
	for(int i=2;i<=L;i++)
	{
		while(s[i]!=s[k+1]&&k>0)k=pr[k];
		if(s[i]==s[k+1])k++;
		pr[i]=k;
		if(pr[i])
			if(!(i%(i-k)))
				ret=ret>i?ret:i;
	}
	return ret;
}