Pagini recente » Borderou de evaluare (job #63752) | Cod sursa (job #888125) | Cod sursa (job #527069)
Cod sursa(job #527069)
#include <stdio.h>
#include <string>
#define maxn 1000010
int i,T,N,p,max;
char A[maxn],P[maxn];
int pi[maxn];
void kmp()
{
int k=0;
pi[1]=0;
for(i=2;i<=N;i++)
{
while(k>0 && A[k+1]!=A[i])
k=pi[k];
if(A[k+1]==A[i])
k++;
pi[i]=k;
if(i%(i-k)==0 && k>0)
max=i;
}
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&T);
for(int t=1;t<=T;t++)
{
scanf("%s",A+1); A[0]=' '; N=strlen(A)-1;
max=0;
kmp();
printf("%d\n",max);
}
}