Cod sursa(job #514090)

Utilizator eudanipEugenie 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;
}