Pagini recente » Cod sursa (job #2647577) | Borderou de evaluare (job #1714095) | Cod sursa (job #2825608) | Cod sursa (job #691165) | Cod sursa (job #2411459)
#include <fstream>
#include <cmath>
const int NMAX=100014;
using namespace std;
int v[NMAX];
int pref[NMAX];
ifstream cin ("numarare.in");
ofstream cout ("numarare.out");
int main() {
int n;
cin>>n;
for(int i=1; i<=n; ++i)
cin>>v[i];
int r=0,c=0;
long long sol=0;
for(int i=1; i<n; ++i) { ///i=1 i<n
if(i>r) {
while(i-pref[i]>0 && i+pref[i]<=n && v[i+pref[i]+1]+v[i-pref[i]] == v[i] + v[i + 1])
++pref[i];
}
else {
int leftover=min(pref[2*c-i],r-i);
pref[i]=leftover;
while(i-pref[i]>0 && i+pref[i]<=n && v[i+pref[i]+1]+v[i-pref[i]] == v[i] + v[i + 1])
++pref[i];
}
if(i+pref[i] + 1>r) {
r=i+pref[i] + 1;
c=i;
}
sol += pref[i];
}
cout << sol << '\n';
return 0;
}