Cod sursa(job #2808221)

Utilizator Cosmin2004_InfoMoldoveanu Cosmin Cosmin2004_Info Data 24 noiembrie 2021 18:50:52
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
const int NMAX = 1e6;
int k[NMAX + 5], p[NMAX + 5];

int main()
{
    int t, n;
    string s;
    fin >> t; p[1] = 1;
    while(t--) {
        fin >> s; n = s.length(); s = " " + s;
        int res = 0;
        for(int i = 2; i <= n; i++) {
            k[i] = k[i - 1];
            while(k[i] && s[k[i] + 1] != s[i]) k[i] = k[k[i]];
            if(s[k[i] + 1] == s[i]) k[i]++;
            p[i] = (k[i] && i % (i - k[i]) == 0 && i / (i - k[i]) == p[k[i]] + 1) ? p[k[i]] + 1 : 1;
            if(p[i] > 1) res = max(res, i);
        }
        fout << res << "\n";
    }
    return 0;
}