社区讨论

这么优美的代码未能AC太可惜,请大佬帮我看看我哪错了!

AT_arc170_d [ARC170D] Triangle Card Game参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mdn2nup1
此快照首次捕获于
2025/07/28 20:16
7 个月前
此快照最后确认于
2025/07/28 21:40
7 个月前
查看原帖
这个题我在atcoder上提交WA:12个点,思路没啥问题。很郁闷!哪位大佬给看看。
CPP
#include <bits/stdc++.h>

using namespace std;
const int maxn = 2e5 + 5;
int T, n, a[maxn], b[maxn], c[maxn];

void solve() {
    cin >> n;
    int res = 0;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
    }
    for (int i = 1; i <= n; ++i) {
        cin >> b[i];
    }
    for (int i = 1; i <= n; ++i) {
        c[i] = 0;
    }
    sort(a + 1, a + 1 + n);
    sort(b + 1, b + 1 + n);
    for (int i = 1; i <= n; ++i) {
        int now1 = 1e9, now2 = 1e9;
        int j = upper_bound(a + 1, a + 1 + n, b[i]) - a - 1;
        int s = lower_bound(a + 1, a + 1 + n, b[i]) - a;
        if (j >= 1 && j <= n) {
            now1 = b[i] - a[j];
        }
        if (s >= 1 && s <= n) {
            now2 = a[s] - b[i];
        }
        c[j] = max(c[j], now2);
        if (j - 1 >= 1 && j <= n) {
            c[j] = max(c[j], b[i] - a[j - 1]);
        }

        c[s] = max(c[s], now1);
        if (s >= 1 && s + 1 <= n) {
            c[s] = max(c[s], a[s + 1] - b[i]);
        }

        res = max(res, min(now1, now2));
    }
    for (int i = 1; i <= n; ++i) {
        bool flag = true;
        if (a[i] <= res || a[i] <= c[i]) {
            continue;
        }
        if (b[1] <= a[i]) {
            int j = upper_bound(a + 1, a + 1 + n, a[i] - b[1]) - a;
            if (j == i) {
                ++j;
            }
            if (j > n || a[j] >= a[i] + b[1]) {
                flag = false;
            }
        }
        if (flag) {
            cout << "Alice\n";
            return;
        }
    }
    cout << "Bob\n";
}

void coder() {
    cin >> T;
    while (T--) {
        solve();
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    coder();

    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...