Cod sursa(job #1759036)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 18 septembrie 2016 14:07:02
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("numarare.in");
ofstream cout("numarare.out");

const int MAXN = 100000;

int v[1 + MAXN], s[1 + MAXN], manacher[1 + MAXN];

int main() {
    int n;
    int answer = 0;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> v[i];
    for (int i = 1; i < n; i++)
        s[i] = v[i + 1] - v[i];
    int right = 0, center = 0;
    for (int i = 1; i < n; i++) {
        if (right >= i)
            manacher[i] = min(right - i, manacher[2 * center - i]);
        while (i - manacher[i] - 1 > 0 && i + manacher[i] + 1 < n && s[i - manacher[i] - 1] == s[i + manacher[i] + 1])
            manacher[i]++;
        if (i + manacher[i] > right) {
            right = i + manacher[i];
            center = i;
        }
        answer = answer + manacher[i] + 1;
    }
    cout << answer << "\n";
    return 0;
}