Cod sursa(job #3350266)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 6 aprilie 2026 19:14:09
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

#define ST_DIO 0
#if ST_DIO
    #define fin cin
    #define fout cout
#else
    ifstream fin("pscpld.in");
    ofstream fout("pscpld.out");
#endif  // ST_DIO

int n, i, a[1000002], ma, pma, lgpoz[1000002];
char cc[1000002], c[2 * 1000002];
long long rasp;

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

    fin >> cc;
    n = strlen(cc);
    c[0] = '#';
    for(i = 1; i <= n; i++) {
        c[2 * i - 1] = cc[i - 1];
        c[2 * i] = '#';
    }
    n = 2 * i;

    for(i = 0; i <= n; i++) {
        int lg = 0;

        if(i < ma) lg = min(ma - i, lgpoz[pma - (i - pma)]);

        while(0 <= i - lg && i + lg <= n && c[i - lg] == c[i + lg]) lg++;
        lg--;
        if(ma < i + lg) {
            ma = i + lg;
            pma = i;
        }

        lgpoz[i] = lg;

        rasp += (lg + 1) / 2;
    }
    fout << rasp;

    return 0;
}