Cod sursa(job #504673)

Utilizator alexeiIacob Radu alexei Data 28 noiembrie 2010 13:59:04
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#include<string.h>

#define NMAX 1000010

int solve1( char S[NMAX] ) //PD cu memoizare @ Marcu Florian
{
	
	int i,PP=1;
	int dim1,dim2=0;
	int N=strlen( S )-1;
	int ans=0;
	S[0]='@';
	
	//printf("%d\n",N);
	
	for (i = 1; i <= N; ++i)
	{
		//printf("Step %d:1 dim1 %d PP %d ans %d %c\n",i,dim1,PP,ans,S[i]); 
		if( S[i]==S[i-PP] && ( dim2+1==PP || S[i+1]==S[i+1-PP] ) )
		{
			dim1=dim2+1;
			dim2=dim1;
		}
		else
		{
			PP=i;
			dim1=dim2=0;
		}
		
		if( dim1==PP ) // am construit un nou prefix, periodic in perioada PP
		{
			ans=i;
			dim1=dim2=0;
		}
		//printf("Step %d:2 dim1 %d PP %d ans %d\n",i,dim1,PP,ans);
	}
	return ans;
}

int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	
	int T;
	scanf("%d\n",&T);
	
	char S[NMAX];
	
	while( T-- )
	{
		memset( S, '0', sizeof(S) );
		fgets( S+1, NMAX , stdin );
		printf("%d\n",solve1(S));
	}
	
	return 0;
}