Cod sursa(job #2732770)

Utilizator Razvan48Capatina Razvan Nicolae Razvan48 Data 29 martie 2021 12:11:15
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <cstring>

using namespace std;

const int LMAX = 1000000;

char sir[1 + LMAX + 1];
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 >> (1 + sir);

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

        int l = strlen(1 + sir);

        for (int i = 2; i <= l; 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;
}