Pagini recente » Cod sursa (job #2372126) | Cod sursa (job #299342) | Cod sursa (job #3154451) | Cod sursa (job #1333960) | Cod sursa (job #1162483)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <int> v;
int n,i,nr,mij,dr,mij2,dr2,sum,equiv,dp[200015],k;
int main(void)
{
FILE * f;
f=fopen("numarare.in","r");
ofstream g("numarare.out");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&nr);
v.push_back(nr);
v.push_back(-1);
//cout<<nr<<' '<<-1<<' ';
}
v.pop_back();
//cout<<'\n';
mij=dr=-1;
//cout<<"0 ";
for (i=1;i<v.size();i++)
{
if (v[i]==-1)
{
if (i>=dr)
{
mij=i;
dr=1;
sum=v[mij+dr]+v[mij-dr];
while ((v[mij+dr]+v[mij-dr]==sum)&&(mij+dr<v.size())&&(mij-dr>=0))
dr=dr+2;
dp[i]=dr;
dr=dr-2;
}
else
{
equiv=i-mij;
mij2=i;
dr2=min(dr,dp[equiv]+i);
sum=v[mij2+dr2]+v[mij2-dr2];
while ((v[mij2+dr2]+v[mij2-dr2]==sum)&&(mij+dr2<v.size())&&(mij-dr2>=0))
dr2=dr2+2;
dp[i]=dr2;
dr2=dr2-2;
if (dr2>dr)
{
dr=dr2;
mij=mij2;
}
}
}
//cout<<dp[i]<<' ';
k=k+dp[i]/2;
}
g<<k<<'\n';
g.close();
return 0;
}