#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define maxn 100005 int a[maxn],l[maxn],r[maxn]; int n,d1,d2; void init() { int i,j; l[1] = 0; r[n] = 0; for(i = 2;i <= n;i ++) { if(a[i] - a[i-1] == d1) l[i] = l[i-1]+1; } for(j = n-1;j >=1;j --) { if(a[j+1]- a[j] == d2) r[j] = r[j+1] + 1; } } int main() { int i; while(scanf("%d %d %d",&n,&d1,&d2)!=EOF ) { for(i = 1;i <= n;i ++) { scanf("%d",&a[i]); } memset(l,0,sizeof(l)); memset(r,0,sizeof(r)); init(); long long ans = 0; if(d1 == d2) { for(i = 1;i <= n; i++) ans += l[i]+1; } else { for(i = 1;i <= n; i++) ans += 1ll*(l[i]+1)*(r[i]+1); } printf("%lld\n",ans); } return 0; }
原文:http://www.cnblogs.com/zhangjialu2015/p/5272208.html