Cod sursa(job #2732757)

Utilizator Razvan48Capatina Razvan Nicolae Razvan48 Data 29 martie 2021 11:57:24
Problema Prefix Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <string>

using namespace std;

const int LMAX = 1000000;

string sir;

int prefix[1 + LMAX];

int main()
{
    ifstream in("prefix.in");
    ofstream out("prefix.out");

    int t;

    in >> t;

    for (int i = 1; i <= t; i++)
    {
        in >> sir;
        sir = ' ' + sir;

        prefix[1] = 0;
        int pi = 0;
        int sol = 0;

        for (int i = 2; i < sir.size(); i++)
        {
            while (pi > 0 && sir[i] != sir[1 + pi])
            {
                pi = prefix[pi];
            }

            if (sir[i] == sir[1 + pi])
            {
                pi++;
            }

            prefix[i] = pi;

            if (pi > 0 && i % (i - pi) == 0)
            {
                sol = i;
            }
        }

        out << sol << '\n';
    }

    return 0;
}