2024 CSPS 33题
  • 板块学术版
  • 楼主1234567890regis
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/9/21 21:23
  • 上次更新2024/9/21 21:58:41
查看原帖
2024 CSPS 33题
231022
1234567890regis楼主2024/9/21 21:23

我第 33 题做错了,于是看了几个讲解视频。

A 老师:这是显然的,选 A。 B 老师:这题选 A,下一题。

我:无语

为什么选 A 啊?我选的 B,我的逻辑如下:

先附源代码:

#include <iostream>
using namespace std;

const int maxn = 100005;

int n;
long long k;
int a[maxn], b[maxn];

int* upper_bound(int* a, int* an, int ai) {
	int l = 0, r = _______(33);
	while (l < r) {
		int mid = (l + r) >> 1;
		if (a[mid] > ai) {
			r = mid;
		} else {
			l = mid + 1;
		}
	}
	return a + l;
}

long long get_rank(int sum)
{
	long long rank = 0;
	for (int i = 0; i < n; ++i) {
		rank += upper_bound(b, b + n, sum - a[i]) - b;
	}
	return rank;
}

int solve() {
	int l = 0, r = a[n - 1] + b[n - 1];
	while (l < r) {
		int mid = ((long long)l + r) >> 1;
		if (get_rank(mid) < k) {
			l = mid + 1;
		} else {
			r = mid;
		}
	}
	return l;
}

int main() {
	cin >> n >> k;
	for (int i = 0; i < n; ++i) cin >> a[i];
	for (int i = 0; i < n; ++i) cin >> b[i];
	cout << solve() << endl;
}

(33):
A:an - a
B:an - a - 1

我的逻辑:

考虑 l = 0, 那么因为数组有 n 个元素,而如果 r = an - ar - l + 1 = an - a - 0 + 1 = n + 1 个元素不对!

所以 r = an - a - 1r - l + 1 = an - a - 1 - a - 0 + 1 = n 是对的,所以选 B。。。吗?

有巨佬帮我解释一下吗?

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