Cod sursa(job #2716524)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 5 martie 2021 12:02:45
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>
#include <cstring>

using namespace std;

const int LMAX = 1e6;

char s[LMAX + 2];
int pi[LMAX + 1];

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

    int t, n, lung, rez;
    in >> t;
    while (t--) {
        in >> (s + 1);
        pi[1] = lung = rez = 0;
        n = strlen(s + 1);
        for (int i = 2; i <= n; ++i) {
            while (lung > 0 && s[i] != s[lung + 1])
                lung = pi[lung];
            if (s[i] == s[lung + 1])
                ++lung;
            pi[i] = lung;
            if (lung && i % (i - lung) == 0)
                rez = max(rez, i);
        }
        out << rez << '\n';
    }

    in.close();
    out.close();
    return 0;
}