Cod sursa(job #2128562)

Utilizator papinub2Papa Valentin papinub2 Data 11 februarie 2018 20:15:14
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int Nmax = 1000005;

int main()
{
    int t;
    string s;
    vector<int> kmp(Nmax);

    in >> t;

    while (t)
    {
        in >> s;
        kmp[0] = -1;
        int rez = 0;
        int nr = 0;
        int w = -1;
        int lg = s.size();

        for (int i = 1; i < lg; i++)
        {
            while (w != -1 && s[w + 1] != s[i])
                w = kmp[w];

            if (s[w + 1] == s[i])
                w++;

            kmp[i] = w;
        }

        for (int i = lg - 1; i >= 0; i--)
            if ((i + 1) % (i - kmp[i]) == 0 && kmp[i] != -1)
            {
                rez = i + 1;
                break;
            }

        out << rez << '\n';
        t--;
    }

    return 0;
}