Pagini recente » Cod sursa (job #1021472) | Cod sursa (job #3033014) | Cod sursa (job #2217883) | Cod sursa (job #1436622) | Cod sursa (job #493154)
Cod sursa(job #493154)
#include <cstdio>
#define file_in "numarare.in"
#define file_out "numarare.out"
#define nmax 101000
int n;
int a[nmax];
int l[nmax];
int sol;
void adfile(void){
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &n);
for (int i=1;i<=n;++i)
scanf("%d", &a[i]),
a[i-1]-=a[i];
n--;
fclose(stdin);
return ;
}
inline int min(int a, int b) { return a<b?a:b; }
void solve(){
int i,st,dr;
st=1;
dr=1;
for (i=1;i<=n;++i)
{
if (i<=dr){
l[i]=min(l[st-dr+1],dr-i);
if (i+l[i]==dr){
st=i-l[i];
dr=i+l[i];
while(st>1 && dr<n && a[i-l[i]-1]==a[i+l[i]+1]){
l[i]++;
st--;
dr++;
}
}
}
else{
l[i]=0;
st=i;
dr=i;
while(st>1 && dr<n && a[i-l[i]-1]==a[i+l[i]+1]){
l[i]++;
st--;
dr++;
}
}
}
sol=0;
for (i=1;i<=n;++i)
sol+=l[i]+1;
printf("%d\n", sol);
}
int main(){
adfile();
solve();
return 0;
}