Pagini recente » Cod sursa (job #375294) | Cod sursa (job #1201909) | Cod sursa (job #658343) | Cod sursa (job #2344352) | Cod sursa (job #2458509)
#include <iostream>
#include <fstream>
using namespace std;
const int maxi = 100005;
int man[maxi], v[maxi];
ifstream f("numarare.in");
ofstream g("numarare.out");
long long make_man(int (&v)[maxi], int n)
{
int r = 0, c = 0;
long long ans = 0;
for (int i = 1; i < n; ++ i)
{
int op = 2 * c - i;
if (i > r || man[op] >= r - i)
{
if (i > r)
r = i;
int k = r + 1;
int sum = v[i] + v[i + 1];
while (k <= n && (2 * i - k + 1 > 0) && (v[k] + v [2 * i - k + 1] == sum))
k ++;
k --;
man[i] = k - i;
if (k > r)
{
c = i;
r = k;
}
}
else
man[i] = man[op];
ans += man[i];
}
return ans;
}
int main()
{
int n;
f >> n;
for (int i = 1; i <= n; ++ i)
f >> v[i];
g << make_man(v, n);
}