Cod sursa(job #1584474)

Utilizator dariusdariusMarian Darius dariusdarius Data 30 ianuarie 2016 10:18:38
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;
const int MAX_N = 100005;

int a[MAX_N];
int ext[MAX_N];

int main() {
    ifstream fin("numarare.in");
    ofstream fout("numarare.out");
    int n;
    fin >> n;
    for (int i = 1; i <= n; ++ i) {
        fin >> a[i];
    }
    ext[1] = 0;
    long long sum = 1;
    int c = 1, r = 2;
    for (int i = 2; i < n; ++ i) {
        int j = 2 * c - i;
        if (i + 1 + ext[j] < r) {
            ext[i] = ext[j];
        } else {
            ext[i] = r - i - 1;
            while (i + ext[i] + 1 + 1 <= n && i - ext[i] - 1 >= 1 && a[i + ext[i] + 1 + 1] + a[i - ext[i] - 1] == a[i] + a[i + 1]) {
                ++ ext[i];
            }
        }

        if (i + ext[i] + 1 > r) {
            c = i;
            r = i + ext[i] + 1;
        }

        sum += ext[i] + 1;
    }
    fout << sum << "\n";
    return 0;
}