Cod sursa(job #1291944)

Utilizator akaprosAna Kapros akapros Data 13 decembrie 2014 15:20:55
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
int n,i,j,k,pi[1000005],t;
char s[1000005];
void prefix()
{
     k=0;
    pi[1]=0;
    for (i=2;i<=n;i++)
    {
        while ((k)&&(s[i]!=s[k+1]))
        k=pi[k];
        if (s[i]==s[k+1]) k++;
        pi[i]=k;
    }
}
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d\n",&t);
    while (t--)
    {
        int ok=0;
        gets(s+1);
        n=strlen(s+1);
        prefix();
        for (i=n;i>=1;i--)
        if ((pi[i])&&(!(i%(i-pi[i]))))
        {
            printf("%d\n",i);
            ok=1;
            break;
        }
        if (!ok) printf("%d\n",0);
    }
    return 0;
}