Cod sursa(job #232983)
| Utilizator | Data | 16 decembrie 2008 17:23:25 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.52 kb |
#include<stdio.h>
#include<string.h>
long t,i,k,m,a[1000005],l,j,x;
char s[1000005];
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%ld",&t);
for(i=1;i<=t;++i)
{scanf("\n");
gets(s);
k=-1;
m=0;
a[0]=-1;
l=strlen(s);
for(j=1;j<l;++j)
{while(k>=0&&s[k+1]!=s[j])k=a[k];
if(s[k+1]==s[j])++k;a[j]=k;
if(a[j]>=0){x=j-a[j];
if((j+1)%x==0)m=j+1;}
}
printf("%ld\n",m);
}
return 0;
}
