Cod sursa(job #1005010)
| Utilizator | Data | 3 octombrie 2013 22:00:23 | |
|---|---|---|---|
| Problema | Prefix | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.64 kb |
#include<stdio.h>
#include<string.h>
char v[1000002];
int pi[1000002];
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
int t,i,n,aux=0;
scanf("%d\n",&t);
while(t--)
{
gets(v+1);
n=strlen(v+1);
memset(pi,0,sizeof(pi));
for(i=2;i<=n;++i)
{
while(v[aux+1]!=v[i]&&aux)
aux=pi[aux];
if(v[aux+1]==v[i])
++aux;
pi[i]=aux;
}
for(i=n;i>1;--i)
if(pi[i] && i%(i-pi[i])==0)
break;
printf("%d\n",i);
}
return 0;
}
