#include<iostream> using namespace std; int main(){ int n,b,b1,s1[100010]={0},s3[200010]={0},sumy=0; cin >> n >> b; for(int i = 0,s;i<n;i++){ scanf("%d",&s);/*段错误:忘打‘&’*/ if(s > b){ s1[i] = 1; }else if(s < b){ s1[i] = -1; }else{ s1[i] = 0; b1 = i; } } for(int i=b1,sum=0;i>=0;i--){ //左侧,不同的和存在不同的下标(因为有负数,所以下标统一加100000),右侧检索相反数个数会更快 sum+=s1[i];/*段错误:忘令sum=0*/ s3[sum+100000]++; if(sum==0)sumy++; /*只有左半侧区间和只有b一个数都算 ! ! !*/ } for(int i = b1+1,sum=0;i<n;i++){ //右侧 sum+=s1[i]; sumy+=s3[-sum+100000];/*段错误:忘加100000*/ } cout << sumy; return 0; }
编写注意点:
1,段错误可能由各种错误引起,如忘加"&",要仔细检查