人调傻了。赛后看了别人的代码,去掉一个 abs 然后就过了。具体来说,我的赛时代码:
int n, m, d, a[N], b[N], ans = -1;
signed main() {
n = read(), m = read(), d = read(), b[0] = INF;
for (int i = 1; i <= n; i++) a[i] = read();
for (int i = 1; i <= m; i++) b[i] = read();
std::sort(a + 1, a + n + 1);
std::sort(b + 1, b + m + 1);
for (int i = 1; i <= n; i++) {
int id = std::upper_bound(b + 1, b + m + 1, a[i] + d) - b - 1;
if (abs(a[i] - b[id]) <= d && id >= 1 && id <= m) ans = std::max(ans, a[i] + b[id]);
}
printf("%lld", ans);
}
然后把最后一个循环里的 if 中的 abs 去掉,其他啥也不动,就可以过了,否则错 20 个点。
有无好心人解释下题意或者这样做是不是正确的/kel