Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1279427)
#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;
}