Mai intai trebuie sa te autentifici.
Cod sursa(job #1005014)
Utilizator | Data | 3 octombrie 2013 22:04:33 | |
---|---|---|---|
Problema | Prefix | Scor | 70 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.81 kb |
#include<stdio.h>
#include<string.h>
char v[1000003];
int pi[1000003];
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
int t,i,n,aux=0,l;
scanf("%d\n",&t);
while(t--)
{
gets(v+1);
n=strlen(v+1);
memset(pi,0,sizeof(pi));
l=0;
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(i-pi[i]==0)
{
if(i>l)
l=i;
}
else if(pi[i] && i%(i-pi[i])==0)
break;
if(i==1)
i=0;
printf("%d\n",i);
}
return 0;
}