Cod sursa(job #2360967)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 2 martie 2019 12:02:14
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <cmath>

using namespace std;

int main() {
    ifstream in("numarare.in");
    ofstream out("numarare.out");

    int n;
    in >> n;
    vector<int> v(n + 1, 0);
    for(int i = 1; i <= n; i ++)
        in >> v[i];

    int center = 1, r = 0;
    vector<int> m(n + 1, 0);
    long long ans = 0;
    for(int i = 2; i <= n; i ++) {
        if(i < r)
            m[i] = min(m[center - (i - center)], r - i + 1);

        while(i + m[i] <= n && i > m[i] + 1 && (v[i + m[i]] + v[i - m[i] - 1]) == (v[i + m[i] - 1] + v[i - m[i]]))
            m[i] ++;

        if(i + m[i] - 1 > r) {
            r = i + m[i] - 1;
            center = i;
        }
        ans += 1LL * m[i];
    }

    out << ans;

    return 0;
}