社区讨论
这么优美的代码未能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 条回复,欢迎继续交流。
正在加载回复...