求问
查看原帖
求问
973237
dingyyds11111楼主2024/9/17 17:21

我使用的是第一篇题解的方法,但是一直过不了,代码如下:

#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];
}

jj 的循环改成 ii11 就可以了,请问这两种写法有什么不同吗?

2024/9/17 17:21
加载中...