Pagini recente » Cod sursa (job #269953) | Cod sursa (job #2748049) | Cod sursa (job #1702844) | Cod sursa (job #1020246) | Cod sursa (job #471883)
Cod sursa(job #471883)
#include <algorithm>
using namespace std;
#define DIM 100005
int v[DIM],d[DIM],l[DIM];
long long nrt;
int n;
void read ()
{
int i;
scanf ("%d",&n);
for (i=1; i<=n; ++i)
{
scanf ("%d",&v[i]);
if (i>1)
{
d[i-1]=v[i]-v[i-1];
l[i-1]=1;
}
}
}
void solve ()
{
int i,st,dr,fs,ls;
for (st=dr=i=1; i<n; ++i)
{
if (dr>i)
l[i]=min (l[(st<<1)-i],dr-i+1);
for (fs=i-l[i], ls=i+l[i]; fs>0 && ls<n; )
{
if (i+l[i]-1>dr)
{
st=i;
dr=i+l[i]-1;
}
if (d[fs]==d[ls])
{
++l[i];
--fs;
++ls;
}
else
break;
}
nrt+=l[i];
}
printf ("%lld",nrt);
}
int main ()
{
freopen ("numarare.in","r",stdin);
freopen ("numarare.out","w",stdout);
read ();
solve ();
return 0;
}