5.连续子区间的和90wa求调

问题:

#10不过,为什么没有用到 0 这个数字?

题目:

题目描述

我们有一个长度为 n 的不递减数组,我们有一个数为 m ,我们想知道其中有多少连续的子区间的和等于 m

输入格式

输入第一行,一个整数 n ,一个整数 m
第二行,输入 n 个整数 A_1...A_n

输出格式

输出一个整数。

样例

Input 1

5 5
1 2 3 5 6

Output 1

2

数据范围

n\le 10^5
0\le m\le 10^9
0\le A_i \le 10^5

代码

#include<iostream>
#include<cstdio>
const int N=1e5+5;
using namespace std;
int n,m,a[N],cnt;
void solve(){
	int i=0,j=0,sum=a[0];
	while(i<=j&&j<n){
//		if(sum==m){
//			if(a[i]==0&&a[j]==m){
//				cout<<"ES\n";
//			}
//		}
		if(sum>=m){
			if(sum==m){
				cnt++;
//				cout<<i<<" "<<j<<'\n';
			}
			sum-=a[i++];
		}else{
			j++;
			sum+=a[j];
		}
	}
	cout<<cnt;
}
int main(){
	cin>>n>>m;
//	cout<<n<<' '<<m<<'\n';
	for(int i=0;i<n;i++){
		cin>>a[i];
//		if(a[i]==1&&a[i-1]==0){
//			cout<<i-1<<'\n';
//		}
	}
	solve();
	return 0;
}

我的思路是把前缀和插入set中,二分查找a[i]-m,已经AC

是 AC 代码?

不是

OK,