题目
小b
有一个 01
序列
A
A
A ,她想知道
A
A
A 有多少个非空连续子序列和为
S
S
S 。
你能帮帮她吗?
输入
第一行输入一个数n
,表示 A
的长度;
第二行输入n
个数‘0’
或‘1’
,表示A
中的元素,以空格隔开;
第三行输入一个非负整数S
; 其中0≤S≤n≤30000
。
输出
输出一个数,表示子数组的个数
示例
输入:
5
1 0 1 0 1
2
输出:
4
代码
#include<bits/stdc++.h>
#define N 30005
#pragma GCC optimize(2)
using namespace std;
int val[N];
int main() {
ios::sync_with_stdio(false);
int n, target, ans = 0;
cin >> n;
for (int i = 0; i < n; ++i) { cin >> val[i]; }
cin >> target;
unordered_map<int, int> umap;
umap[0] = 1;
for (int i = 0, curSum = 0; i < n; ++i) {
curSum += val[i];
ans += umap[curSum - target];
umap[curSum]++;
}
cout << ans;
return 0;
}