Cod sursa(job #219416)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 6 noiembrie 2008 21:00:22
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <cstdio>
#include <cstring>

int n,t[1000001];
char a[1000001];

int prefix()
{
	int k=-1;
	t[0]=-1;
	int max=0;
	for(int i=1; a[i]; ++i)
	{
		while (k>=0 && a[i]!=a[k+1])
			k=t[k];
		if (a[i]==a[k+1])
            ++k;
		t[i]=k;
		if ((t[i]>=0) && (i+1)%(i-t[i])==0)
            max=i+1;
	}
	return max;
}

int main()
{
	freopen("prefix.in", "r", stdin);
	freopen("prefix.out", "w", stdout);
	scanf("%d", &n);
	for(int i=1; i<=n; ++i)
	{
		fgets(a,1000001,stdin);
		if (a[strlen(a)-1]=='\n')
            a[strlen(a)-1]=0;
		printf("%d\n", prefix());
	}
	return 0;
}