Cod sursa(job #870493)

Utilizator Athena99Anghel Anca Athena99 Data 3 februarie 2013 15:03:33
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cassert>
#include <cstdio>
#include <cstring>

const int nmax=1000002;
int p[nmax];
char c[nmax];

int main()
{
    int t=0,i=0,sol=0,k=0;

    assert(freopen("prefix.in","r",stdin));
    assert(freopen("prefix.out","w",stdout));

    assert(scanf("%d\n",&t));

    for (t=t; t>0; --t)
    {
        gets(c+1);

        i=2;
        sol=0;
        k=0;

        while (c[i])
        {
            while (k>0 && c[i]!=c[k+1])
                k=p[k];

            if (c[i]==c[k+1])
                ++k;

            p[i]=k;
            ++i;
        }

        for (i=strlen(c+1); i>1; --i)
            if (p[i]>0 && i-p[i]!=0 && i%(i-p[i])==0)
            {
                sol=i;
                i=0;
            }

        assert(printf("%d\n",sol));
    }

    return 0;
}