Cod sursa(job #2798464)

Utilizator ElizaTElla Rose ElizaT Data 11 noiembrie 2021 12:27:23
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 2000000;
int lps[NMAX + 5];

int main()
{
    ifstream fin("pscpld.in");
    ofstream fout("pscpld.out");
    int n,md = -1,poz = 0;
    long long ans = 0;
    string s,s1;
    fin >> s1;
    s += '#';
    for (int i = 0;i < s1.size();i++) {
        s += s1[i];
        s += '#';
    }
    for (int i = 0;i < s.size();i++) {
        if (i <= poz + md)
            lps[i] = min(lps[2 * md - i], md + poz - i);
        while (i + lps[i] + 1 < s.size() && i - lps[i] - 1 >= 0 && s[i + lps[i] + 1] == s[i - lps[i] - 1])
            lps[i]++;
        if (lps[i] + i > md + poz) {
            md = i;
            poz = lps[i];
        }
        ans += (lps[i] + i % 2) / 2;
    }
    fout << ans;
    return 0;
}