Pagini recente » Cod sursa (job #1292566) | Cod sursa (job #1618487) | Cod sursa (job #1834945) | Cod sursa (job #2519095) | Cod sursa (job #1279429)
#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 = 0, maxim = 0, cnt = 0, 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;
}