Pagini recente » Cod sursa (job #140645) | Cod sursa (job #2402094) | Cod sursa (job #744138) | Cod sursa (job #1688019) | Cod sursa (job #503926)
Cod sursa(job #503926)
#include <cstdio>
#define infile "numarare.in"
#define outfile "numarare.out"
#define MaxN 100024
int a[MaxN], sol[MaxN];
long long rez;
int N;
void read()
{
int i;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&a[i]);
}
}
int minim(int a,int b)
{
if(a<b)
return a;
return b;
}
void solve()
{
int i,l,s,last=1;
if(a[1]+a[4]==a[2]+a[3])
sol[1]=1;
for(i=2;i<N-2;i++)
{
if(i<last+sol[last])
sol[i]=minim(sol[last-(i-last)],last+sol[last]-i);
l=sol[i];
if(last+sol[last]<=i+sol[i])
{
last=i;
while(i-l+1>=1 && i+l+2<=N && a[i-l+3]+a[i+l]==a[i+l+2]+a[i-l+1])
l++;
}
}
rez=N-1;
for(i=1;i<=N;i++)
rez+=sol[i];
}
void write()
{
int i;
printf("%lld\n",rez);
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
read();
solve();
write();
fclose(stdin);
fclose(stdout);
return 0;
}