Cod sursa(job #362422)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 9 noiembrie 2009 17:44:01
Problema Prefix Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.5 kb
#include <cstdio>
#define LMAX 1000010
#include <cstring>

int t, pi[LMAX];
char s[LMAX];

int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	scanf("%d",&t);
	int i, k, r, n;
	while (t--)
	{
		scanf("%s",s);
		n=strlen(s);
		for (i=n; i>0; i--) s[i]=s[i-1];
		k=r=0;
		pi[1]=0;
		for (i=2; i<=n; i++)
		{
			while (k && s[k+1]!=s[i]) k=pi[k];
			if (s[k+1]==s[i]) k++;
			pi[i]=k;
			if (pi[2*(i-k)]==i-k && !(i %(i-k))) r=i;
		}
		printf("%d\n",r);
	}
}