我使用的是第一篇题解的方法,但是一直过不了,代码如下:
#include <bits/stdc++.h>
using namespace std;
signed main() {
int n, b, ans = 0;
cin >> n >> b;
vector <int> a(n + 1);
unordered_map <int, int> mp;
int suma = 0, sumb = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i ++) {
if (a[i] == b) {
for (int j = i; j <= n; j ++) {
if (a[j] < b) suma --;
if (a[j] > b) suma ++;
mp[suma] ++;
}
for (int j = 1; j <= i; j ++) {
if (a[j] < b) sumb --;
if (a[j] > b) sumb ++;
ans += mp[0 - sumb];
}
break;
}
}
cout << ans;
return 0;
}
直到我把
for (int j = 1; j <= i; j ++) {
if (a[j] < b) sumb --;
if (a[j] > b) sumb ++;
ans += mp[0 - sumb];
}
j 的循环改成 i 到 1 就可以了,请问这两种写法有什么不同吗?