Cod sursa(job #855291)

Utilizator dariusdariusMarian Darius dariusdarius Data 14 ianuarie 2013 20:50:43
Problema Prefix Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include<stdio.h>
#include<string.h>
char s[1000005];
int n,p[1000005];
void solve()
{
    int i,x;
    p[0]=0;x=0;
    for(i=2;i<=s[i]!=0;i++)
    {
        while(x && s[i]!=s[x+1])
            x=p[x];
        if(s[i]==s[x+1])
            x++;
        p[i]=x;
    }
    int max=0;
    for(i=1;s[i]!=0;i++)
        if(p[i]!=i && i%(i-p[i])==0 && p[i])
            max=i;
    printf("%d\n",max);
}
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    int n,i;
    scanf("%d",&n);getchar();
    for(i=1;i<=n;i++)
    {
        gets(s+1);
        solve();
    }
    return 0;
}