Pagini recente » Cod sursa (job #1431290) | Cod sursa (job #1307830) | Cod sursa (job #1798413) | Cod sursa (job #2485524) | Cod sursa (job #504673)
Cod sursa(job #504673)
#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;
}