Pagini recente » Cod sursa (job #9360) | Cod sursa (job #3001376) | Cod sursa (job #1391533) | Cod sursa (job #2258999) | Cod sursa (job #1212813)
#include <cstdio>
#define Nmax 100005
using namespace std;
int a[Nmax],Z[Nmax],N;
inline void Manacher()
{
int L,M=0,R=0,t,i;
Z[1]=0;
for(i=2;i<=N;++i)
if(i>R)
{
M=i;
for(R=M+1;R<=N && a[R]==a[2*M-R];++R);
--R;
Z[i]=R-M;
}
else
{
t=2*M-i; L=2*M-R;
if(Z[t]<t-L)
Z[i]=Z[t];
else
{
M=i;
for(++R;R<=N && a[R]==a[2*i-R];++R);
--R;
Z[i]=R-M;
}
}
}
int main()
{
long long sol;
int i;
freopen ("numarare.in","r",stdin);
freopen ("numarare.out","w",stdout);
scanf("%d", &N);
for(i=1;i<=N;++i)
scanf("%d", &a[i]);
for(i=2;i<=N;++i)
a[i-1]=a[i]-a[i-1];
--N;
Manacher();
sol=N;
for(i=1;i<=N;++i)
sol+=Z[i];
printf("%lld\n", sol);
return 0;
}