Cod sursa(job #3306605)

Utilizator gugalcromMuntoiu Vlad-Ioan gugalcrom Data 12 august 2025 14:34:02
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main() {
    ifstream fin("pscpld.in");
    ofstream fout("pscpld.out");
    string original;
    fin >> original;
    string sir;
    for(auto c: original) {
        sir.push_back('#');
        sir.push_back(c);
    }
    sir.push_back('#');

    int mx = 0, cmx = 0;
    long long int pal = 0;
    vector<int> r(sir.size());
    for(int i=0; i<sir.size(); ++i) {
        int raza = 0;
        
        if(i < mx) {
            raza = min(mx - i, r[cmx - (i - cmx)]);
        }

        for(; i-raza >= 0 && i+raza < sir.size() && sir[i-raza] == sir[i+raza]; ++raza);
        --raza;
        if(i+raza > mx) {
            mx = i+raza;
            cmx = i;
        }

        r[i] = raza;

        pal += (raza + 1) / 2;
    }
    fout << pal << '\n';

    return 0;
}