Pagini recente » Cod sursa (job #729948) | Cod sursa (job #2022332) | Cod sursa (job #2432414) | Istoria paginii utilizator/diana_florescu | Cod sursa (job #1584474)
#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;
}