Cod sursa(job #892293)

Utilizator auRSTARHreapca Aurelian auRSTAR Data 26 februarie 2013 00:04:50
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 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));
        q=0;
        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-prefix[i]==0)continue;
            if(!(i%(i-prefix[i]))){ok=1;printf("%d\n",i);break;}
        }
        if(!ok)printf("0\n");
    }
    return 0;
}