Pagini recente » Cod sursa (job #2771256) | Cod sursa (job #986918) | Cod sursa (job #1531485) | Cod sursa (job #1384554) | Cod sursa (job #2485008)
#include <cstdio>
int v[100005],w[100005],k[100005];
using namespace std;
int main ()
{
freopen ("numarare.in","r",stdin);
freopen ("numarare.out","w",stdout);
int n,m,i,con;
scanf ("%d", &n);
for (i=1;i<=n;i++)
{
scanf ("%d",&v[i]);
if (i>=3)
w[i-2]=v[i]-v[i-2];
}
m=n-2;
con=1;
if (w[1]==w[2])
k[1]=1;
for (i=2;i<=m;i++)
{
if (i<con+k[con])
{
if ((k[con-(i-con)]<con+k[con]-i))
k[i]=k[con-(i-con)];
else
k[i]=con+k[con]-i;
}
if (con+k[con]<=i+k[i])
{
con=i;
while (i-(k[i]+1)+1>=1&&i+(k[i]+1)<=m&&w[i+(k[i]+1)]==w[i-(k[i]+1)+1])
{
k[i]++;
}
}
}
long long int sol=n-1;
for (i=1;i<=m;i++)
sol=sol+k[i];
printf ("%lld",sol);
return 0;
}