Cod sursa(job #1279427)

Utilizator diana97Diana Ghinea diana97 Data 30 noiembrie 2014 12:57:47
Problema Numarare Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 100000;
int n;
int v[NMAX], sol[NMAX];

void citeste() {
    f >> n;
    for (int i = 1; i <= n; i++) f >> v[i];
}

void rezolva() {
    int l, maxim = 0, cnt, rez = 0;
    sol[0] = 1;
    for (int i = 1; i < n; i++) {
        cnt = min(sol[2 * maxim - i], 2 * maxim - i - (maxim - sol[maxim]));
        for (l = 0; i - cnt - l >= 1 && i + cnt + 1 + l <= n; l++)
            if (v[i - cnt - l] + v[i + cnt + 1 + l] != v[i] + v[i + 1]) break;
        sol[i] = cnt + l;
        rez += sol[i];
        if (sol[i] + i > sol[maxim] + maxim) maxim = i;
    }
    g << rez;
}

int main() {
    citeste();
    rezolva();
    return 0;
}