Cod sursa(job #2360926)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 2 martie 2019 11:33:20
Problema Numarare Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <cmath>

using namespace std;

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

int main() {

    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)], n - 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;
}