#4336. CSP 2023 提高级第一轮:程序阅读第三题
CSP 2023 提高级第一轮:程序阅读第三题
01 #include <vector>
02 #include <algorithm>
03 #include <iostream>
04
05 using namespace std;
06
07 bool f0(vector<int> &a, int m, int k) {
08 int s = 0;
09 for (int i = 0, j = 0; i < a.size(); i++) {
10 while (a[i] - a[j] > m)
11 j++;
12 s += i - j;
13 }
14 return s >= k;
15 }
16
17 int f(vector<int> &a, int k) {
18 sort(a.begin(), a.end());
19
20 int g = 0;
21 int h = a.back() - a[0];
22 while (g < h) {
23 int m = g + (h - g) / 2;
24 if (f0(a, m, k)) {
25 h = m;
26 }
27 else {
28 g = m + 1;
29 }
30 }
31
32 return g;
33 }
34
35 int main() {
36 int n, k;
37 cin >> n >> k;
38 vector<int> a(n, 0);
39 for (int i = 0; i < n; i++) {
40 cin >> a[i];
41 }
42 cout << f(a, k) << endl;
43 return 0;
44 }
1、{{ select(1) }} 将第 24 行的 m 改为 m - 1,输出有可能不变,而剩下情况为少 1。
- 正确
- 错误
2、{{ select(2) }} 将第 22 行的 g + (h - g) / 2 改为 (h + g) >> 1,输出不变。
- 正确
- 错误
3、{{ select(3) }} 当输入为 5 7 2 -4 5 1 -3,输出为 5。
- 正确
- 错误
4、{{ select(4) }} 设数组 a 中最大值减最小值加 1 为 A,则 f 函数的时间复杂度为()。
- O(n log A)
- O(n^2 log A)
- O(n log (nA))
- O(n log n)
5、{{ select(5) }} 将第 10 行中的 > 替换为 >=,那么原输出与现输出的大小关系为()。
- 一定小于
- 一定小于等于且不一定小于
- 一定大于等于且不一定大于
- 以上三种情况都不对
6、{{ select(6) }} 当输入为 5 8 2 -5 3 8 -12,输出为()。
- 13
- 14
- 8
- 15