Cod sursa(job #514090)
Utilizator | Eugenie Daniel Posdarascu eudanip | Data | 17 decembrie 2010 19:22:30 |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.73 kb |
#include<stdio.h>
#include<string.h>
int pi[1000005];
char p[1000005];
int n,t,q,sol;
int main ()
{
int i;
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d\n",&t);
for(;t;t--)
{
p[0]=' ';
fgets(p+1,sizeof(p)-1,stdin);
n=strlen(p+1);
while(!(p[n]>='a' && p[n]<='z'))
n--;
q=0;sol=0;
for(i=2;i<=n;i++)
{
while(q>0 && p[q+1]!=p[i])
q=pi[q];
if(p[q+1]==p[i])
q++;
pi[i]=q;
if(pi[i] && i%(i-pi[i])==0)
sol=i;
}
printf("%d\n",sol);
}
return 0;
}