Cod sursa(job #214357)

Utilizator Mishu91Andrei Misarca Mishu91 Data 13 octombrie 2008 22:48:14
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <cstdio>
#include <cstring>

#define MAX_S 1000005

char S[MAX_S];
int pi[MAX_S];
int T, N, MAX;

void make_prefix()
{
    int q = 0, i;

    for(i = 2, pi[1] = 0; i <= N; ++i)
    {
        while(q && S[q+1] != S[i])
            q = pi[q];
        if(S[q+1] == S[i])
            ++q;
        pi[i] = q;

        if(q && (i % (i - q) == 0))
            MAX = i;
    }
}

void solve()
{
    gets(S + 1);
    N = strlen(S + 1);
    MAX = 0;

    make_prefix();
    printf("%d\n",MAX);
}

int main()
{
    freopen("prefix.in","rt",stdin);
    freopen("prefix.out","wt",stdout);
    scanf("%d\n",&T);
    while(T--)
        solve();
}