Cod sursa(job #520850)

Utilizator tudorsTudor Siminic tudors Data 10 ianuarie 2011 17:20:51
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
int m,n,p,k,i,rez,j;
long L[1000005];
char A[1000005];

FILE *fin=fopen("prefix.in","r");
FILE *fout=fopen("prefix.out","w");

int main()
{	
	fscanf(fin,"%d",&m);
	A[0]='0';
	for (i=1;i<=m;i++)
	{
		fscanf(fin,"%s",&A[1]);
		n=strlen(A)-1;
		
		L[1]=0;
		k=0;
		rez=0;
		for (p=2;p<=n;p++)
		{
			while (k>0 && A[p]!=A[k+1])
				k=L[k];
			if (A[k+1]==A[p])
				k++;
			L[p]=k;
			if (p%(p-k)==0 && k>0)
				rez=p;
		}	
		fprintf(fout,"%d\n",rez);
	}
	fclose(fin);
	fclose(fout);
	return 0;
}