Cod sursa(job #485804)

Utilizator drywaterLazar Vlad drywater Data 19 septembrie 2010 16:16:02
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <stdio.h>
#include <string.h>
using namespace std;
FILE *f=fopen("prefix.in","r"),*g=fopen("prefix.out","w");
int n,i,pr[1000010],k,j,sol,len;
char s[1000010],c;
int main(void)
{
	fscanf(f,"%d",&n);
	fscanf(f,"%c",&c);
	for (j=1;j<=n;j++)
	{
		fgets(s,1000000,f);
		len=strlen(s);
		len-=2;
		for (i=0;i<=len;i++)
			pr[i]=0;
		k=-1;
		sol=-1;
		pr[0]=-1;
		for (i=1;i<=len;i++)
		{
			while (k!=-1 && s[i]!=s[k+1])
				k=pr[k];
			if (s[k+1]==s[i])
				k++;
			pr[i]=k;
			if (k!=-1 && (i+1)%(i-k)==0 && sol<i)
				sol=i;
		}
		fprintf(g,"%d\n",sol+1);
	}
	fclose(g);
	return 0;
}