Pagini recente » Cod sursa (job #2958818) | Cod sursa (job #533062) | Cod sursa (job #1377502) | Cod sursa (job #3122944) | Cod sursa (job #1162840)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
vector <int> v;
char s[800010];
int n,i,nr,mij,dr,mij2,dr2,equiv,dp[200015],sz,b;
long long k;
int main(void)
{
FILE * f;
f=fopen("numarare.in","r");
ofstream g("numarare.out");
fscanf(f,"%d",&n);
fgets(s,2,f);
fgets(s,800005,f);
v.reserve(200015);
v.push_back(1000000000);
v.push_back(-1);
sz=strlen(s);
i=0;
while (i<sz)
{
nr=0;
if (s[i]=='-')
{
b=-1;
i++;
}
else
b=1;
while (('0'<=s[i])&&(s[i]<='9'))
{
nr=nr*10+s[i]-'0';
i++;
}
i++;
nr=nr*b;
v.push_back(nr);
v.push_back(-1);
}
v.push_back(1000000000);
for (i=3;i<v.size()-2;i=i+2)
{
if (i>=mij+dr)
{
mij=i;
dr=1;
while (v[mij+dr+2]+v[mij-dr-2]==v[mij+dr]+v[mij-dr])
dr=dr+2;
dp[i]=dr;
}
else
{
equiv=2*mij-i;
mij2=i;
dr2=min(dr-(i-mij),dp[equiv]);
while (v[mij2+dr2+2]+v[mij2-dr2-2]==v[mij2+dr2]+v[mij2-dr2])
dr2=dr2+2;
dp[i]=dr2;
if (mij2+dr2>mij+dr)
{
dr=dr2;
mij=mij2;
}
}
k=k+(dp[i]+1)/2;
}
g<<k<<'\n';
g.close();
return 0;
}