Cod sursa(job #1686146)

Utilizator sucureiSucureiRobert sucurei Data 12 aprilie 2016 08:52:58
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <fstream>

using namespace std;

const int LEN_MAX = 1e6;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

char a[LEN_MAX + 5];
int p[LEN_MAX + 5];

int solutie()
{
    fin.getline(a + 1, LEN_MAX + 2);

    int i = 2;
    for (int q = 0; a[i]; ++i)
    {
        while (q > 0 && a[q + 1] != a[i])
            q = p[q];
        if (a[q + 1] == a[i])
            ++q;
        p[i] = q;
    }

    --i;
    while (i > 0 && (p[i] == 0 || p[i] % (i - p[i]) != 0))
        --i;

    return i;
}

int main()
{
    int T;
    (fin >> T).ignore(1);

    while (T--)
        fout << solutie() << "\n";
    return 0;
}