Cod sursa(job #2951234)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 5 decembrie 2022 19:03:05
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin  ("prefix.in");
ofstream fout ("prefix.out");

const int LIM = 1e6;
string s;
int n, cnt, sol;
int lung, pref[LIM + 5];

int main (){
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr), fout.tie(nullptr);

    int teste;
    fin>>teste;
    while(teste--){
        fin>>s;
        s = " " + s, n = (int)s.size() - 1;

        lung = 0;
        pref[1] = 0;
        for(int i=2; i<=n; i++){
            while(lung > 0 && s[lung+1] != s[i])
                lung = pref[lung];

            if(s[lung+1] == s[i])
                lung++;

            pref[i] = lung;
        }
        /**
        ab ab ab ab
        00 12 34 56
        **/

        sol = 0;
        for(int i=1; 2*i<=n; i++){
            cnt = 1;
            for(int j=2*i; j<=n; j+=i){
                if(pref[j] == j-i)
                    cnt++;
                else
                    break;
            }
            if(cnt >= 2)
                sol = max(sol, cnt * i);
        }
        fout<<sol<<"\n";
    }
    return 0;
}