Cod sursa(job #892276)

Utilizator auRSTARHreapca Aurelian auRSTAR Data 25 februarie 2013 23:51:52
Problema Prefix Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<cstdio>
#include<cstdlib>
#include<cstring>
int len,i,t,prefix[1000010],q,ok;
char A[1000010];
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d",&t);
    for(;t;--t)
    {
        scanf(" %s",A+1);
        len=strlen(A+1);
        memset(prefix,0,sizeof(prefix));
        for(i=2;i<=len;i++)
        {
            while(q&&A[q+1]!=A[i])q=prefix[q];
            if(A[q+1]==A[i])++q;
            prefix[i]=q;
        }
        ok=0;
        for(i=len;i>=1;i--)
        {
            if(!prefix[i])continue;
            if(!(i%(i-prefix[i]))){ok=1;printf("%d\n",i);break;}
        }
        if(!ok)printf("0\n");
    }
    return 0;
}