问题:
#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;
}