Pagini recente » Cod sursa (job #2840456) | Cod sursa (job #337379) | Cod sursa (job #2523808) | Cod sursa (job #3251484) | Cod sursa (job #1209261)
#include <fstream>
using namespace std;
int n, a[200002], d[200002];
long long result;
int main()
{ ifstream f("numarare.in");
ofstream g("numarare.out");
f>>n;
for (int i=1;i<=n;++i)
f>>a[2*i-1];
int mid=0,last=0;
for (int i=2;i<=2*n-1;i+=2)
{
int sizenow=1;
if (last>=i)
sizenow=min(d[mid-(i-mid)],(mid-(i-mid))-(mid-(last-mid))+1);
sizenow = max(sizenow,1);
if (sizenow % 2 == 0)
--sizenow;
while (i-sizenow-2>=1 && i+sizenow+2<=2*n-1 && a[i-sizenow]+a[i+sizenow] == a[i-sizenow-2] + a[i+sizenow+2])
sizenow += 2;
if (i+sizenow>last)
mid = i;
last = i+sizenow;
d[i] = sizenow;
result += (sizenow+1)/2;
}
g<<result<<'\n';
return 0;
}