Cod sursa(job #922504)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 22 martie 2013 11:25:43
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define DN 1000005
using namespace std;

char a[DN];
int pi[DN],m;

void make()
{
    int k=0;
    pi[1]=0;

    for(int i=2;i<=m;++i)
    {
        while(k && a[k+1]!=a[i])
            k=pi[k];
        if(a[k+1]==a[i])
            ++k;
        pi[i]=k;
    }
}


int main()
{
    int n;
    freopen("prefix.in","r", stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d\n",&n);

    for(;n;--n)
    {
        scanf("%s\n",a+1);
        m=strlen(a+1);

        make();
        bool ok=false;
        for(int i=m;i>=1;--i)
        {
            if( pi[i] && i%(i-pi[i])==0)
            {
                printf("%d\n",i);
                ok=true;
                break;
            }
        }

        if(ok==false)
        {
            printf("0\n");
            continue;
        }
    }
    return 0;
}