Cod sursa(job #2653999)

Utilizator alexradu04Radu Alexandru alexradu04 Data 29 septembrie 2020 17:31:43
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <bits/stdc++.h>

using namespace std;

const int nMax = 1e6 + 13;
char a[nMax];
int n, pi[nMax], k, q, ans;


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

    cin >> q;
    for (; q; --q) {
        cin >> a + 1;
        n = strlen(a + 1);
        ans = 0;
        k = 0;
        pi[1] = 0;
        for (int i = 2; i <= n; ++i) {
            while (k > 0 && a[i] != a[k + 1])
                k = pi[k];

            if (a[i] == a[k + 1])
                ++k;
            pi[i] = k;
            if (k != 0 && k % (i - k) == 0)
                ans = i;
        }
        cout << ans << "\n";
    }
    return 0;
}