#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