Cod sursa(job #1553168)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 19 decembrie 2015 12:40:32
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
# include <bits/stdc++.h>

using namespace std;

const int Nmax = 1000000 + 5;

char a[Nmax];
int phi[Nmax], N, n;

void make_phi()
{
    int k = 0;

    N = strlen(a+1);
    memset(phi, 0, sizeof(phi));
    phi[1] = 0;

    for (int i = 2; i <= N; ++i)
    {
        k = phi[i - 1];
        while (k && a[i] != a[k + 1]) k = phi[i];

        if (a[i] == a[k + 1]) phi[i] = k + 1;
        else phi[i] = 0;
    }
}

void sol ()
{
    make_phi();
    for (int i = N; i >= 2; --i)
    {
        if (phi[i] > 0 && i % (i - phi[i]) == 0)
        {
            printf("%d\n", i);
            return;
        }
    }

    printf("0\n");
}
int main ()

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

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

    for (int i = 1; i <= n; ++i)
    {
        gets(a + 1);
        sol();
    }

    return 0;
}