开个map表示每个数组单独是否已经被算过了,注意自增和下标的前移以及回退,不要死循环~
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n,d1,d2;
const int maxn=1e5+10;
int a[maxn];map<int,int>m;
int main(){
while(scanf("%d%d%d",&n,&d1,&d2)!=EOF){
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
m.clear();
ll ans=0;
int sum,flag;flag=0;
for(int i=1;i<=n;i++){
int j=i+1;sum=1;//flag=0;
while(j<=n&&a[j]-a[j-1]==d1){
sum++;j++;
}
while(j<=n&&a[j]-a[j-1]==d2){
sum++;j++;
}
// system("pause");
// cout<<" j= "<<j<<endl;
// cout<<" i= "<<i<<" sum= "<<sum<<endl;
if(j!=i+1){
ans+=(1ll*sum*(sum+1)/2);m[j-1]=1;
if(m[i]) ans--;
}
else if(m[i]==0) ans+=(1ll*sum*(sum+1)/2);
// cout<<" ans = "<<ans<<endl;
if(j!=i+1) i=j-2;
}
printf("%lld\n",ans);
}
}