Cod sursa(job #1625063)

Utilizator DiClauDan Claudiu DiClau Data 2 martie 2016 16:19:14
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <cstring>
#define sz 1000002

char P[sz];
int prefixFunc[sz], T;

void computePF(int len);

int main()
{
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);

    scanf("%d\n", &T);

    for (int i = 1 ; i <= T ; ++i)
    {
        gets(P + 1);
        int len = strlen(P + 1);

        computePF(len);

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

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

    return 0;
}

void computePF(int len)
{
    int k = 0;
    prefixFunc[1] = 0;

    for (int q = 2 ; q <= len ; ++q)
    {
        while (k > 0 && P[k + 1] != P[q])
            k = prefixFunc[k];

        if (P[k + 1] == P[q])
            k++;

        prefixFunc[q] = k;
    }
}