Cod sursa(job #342311)
Utilizator | Mihai Gheorghe GheorgheMihai | Data | 21 august 2009 12:16:13 |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.48 kb |
#include<stdio.h>
#include<string.h>
int n,m,nr;
int p[1<<20];
char v[1<<20];
void prefix()
{
int i,q=0,l=0;
p[1]=0;
for(i=2;i<=n;i++)
{
while(q && v[q+1]!=v[i])
q=p[q];
if(v[q+1]==v[i])
q++;
p[i]=q;
if(q && i%(i-q)==0)
l=i;
}
printf("%d\n",l);
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
int t;
scanf("%d\n",&t);
while(t--)
{
gets(v+1);
n=strlen(v+1);
prefix();
}
return 0;
}