Cod sursa(job #2366838)

Utilizator andreisontea01Andrei Sontea andreisontea01 Data 4 martie 2019 22:26:09
Problema PScPld Scor 0
Compilator cpp-64 Status done
Runda simulare04032019 Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

string s;

void precalc(){
    string cps = "$";
    for(int i = 0; i < int(s.size()); ++i){
        cps += s[i];
        cps += '$';
    }
    s = cps;
}

int lps[1000005];
int n;

void calcLPS(){
    int centre = 0, right = 0;
    for(int i = 0; i < n; ++i){
        int left = 2 * centre - i;
        if(right > i)
            lps[i] = min(lps[left], lps[right - i]);
        while(s[i - lps[i] - 1] == s[i + lps[i] + 1])
            lps[i]++;
        if(lps[i] > lps[centre]){
            centre = i;
            right = i + lps[i];
        }
    }
}

int main()
{
    ifstream fin("pscpld.in");
    ofstream fout("pscpld.out");
    getline(fin, s);
    precalc();
    n = int(s.size());
    calcLPS();
    long long sum = 0;
    for(int i = 1; i < n; i += 2)
        sum += lps[i];
    fout << sum;
    return 0;
}