Cod sursa(job #2437469)

Utilizator IoanaDraganescuIoana Draganescu IoanaDraganescu Data 9 iulie 2019 16:48:19
Problema PScPld Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>

using namespace std;

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

char c[2000005];
int d[2000005];

int main()
{
    char a;
    int n = 0;
    c[0] = '-';
    while (fin >> a)
    {
        c[++n] = a;
        c[++n] = '-';
    }
    n--;
    int centru = 0;
    long long sol = 0;
    for (int i = 0; i <= n + 1; i++){
        int i2 = 2 * centru - i;
        if (i < centru + d[centru])
            d[i] = i2 - max(i2 - d[i2], centru - d[centru]);
        while (i + d[i] <= n + 1 && i - d[i] >= 0){
            if (c[i + d[i]] == c[i - d[i]])
                d[i]++;
            else
                break;
        }
        if (i + d[i] > centru + d[centru])
            centru = i;
        d[i]--;
        if (c[i] == '-')
            sol += d[i] / 2;
        else
            sol += d[i] / 2 + 1;
    }
    fout << sol << '\n';
    return 0;
}