3.
假设输入总是合法的且
- #include <vector>
- #include <algorithm>
- #include <iostream>
- using namespace std;
- bool f0(vector<int> &a, int m, int k) {
- int s = 0;
- for (int i = 0, j = 0; i < a.size(); i++) {
- while (a[i] - a[j] > m)
- j++;
- s += i - j;
- }
- return s >= k;
- }
- int f(vector<int> &a, int k) {
- sort(a.begin(), a.end());
- int g = 0;
- int h = a.back() - a[0];
- while (g < h) {
- int m = g + (h - g) / 2;
- if (f0(a, m, k)) {
- h = m;
- }
- else {
- g = m + 1;
- }
- }
- return g;
- }
- int main() {
- int n, k;
- cin >> n >> k;
- vector<int> a(n, 0);
- for (int i = 0; i < n; i++) {
- cin >> a[i];
- }
- cout << f(a, k) << endl;
- return 0;
- }
![第 18 题 3. #include <vector> #include <algorithm> #include <iostream> using namespace std; bool f0(vector<int> &a, int m, int k) { int s = 0; for (int i = 0, j = 0; i < a.size(); i++) { while (a[i] - a[j] > m) j++; s += i - j; } return s >= k; } int f(vector<int> &a, int k) { sort(a.begin(), a.end()); int g = 0; int h = a.back() - a[0]; while (g < h) { int m = g + (h - g) / 2; if (f0(a, m, k)) { h = m; } else { g = m + 1; } } return g; } int main() { int n, k; cin >> n >> k; vector<int> a(n, 0); for (int i = 0; i < n; i++) { cin >> a[i]; } cout << f(a, k) << endl; return 0; } 假设输入总是合法的且 ,完成下面的判断题和单选题: 判断题 将第 2424 行的 m 改为 m - 1,输出有可能不变,而剩下情况为少 11。() 将第 2222 行的 g + (h - g) / 2 改为 (h + g) >> 1,输出不变。() 当输入为 5 7 2 -4 5 1 -3,输出为 5。() 单选题 设 aa 数组中最大值减最小值加 11 为 AA,则 f 函数的时间复杂度为()。 将第 1010 行中的 > 替换为 >=,那么原输出与现输出的大小关系为()。 当输入为 5 8 2 -5 3 8 -12,输出为()。 1. A.正确 B.错误 2. A.正确 B.错误 3. A.正确 B.错误 4. 5. A. 一定小于 B.一定小于等于且不一定小于 C.一定大于等于且不一定大于 D.以上三种情况都不对. 6. A.13 B.14 C.8 D.15 第 18 题 3. #include <vector> #include <algorithm> #include <iostream> using namespace std; bool f0(vector<int> &a, int m, int k) { int s = 0; for (int i = 0, j = 0; i < a.size(); i++) { while (a[i] - a[j] > m) j++; s += i - j; } return s >= k; } int f(vector<int> &a, int k) { sort(a.begin(), a.end()); int g = 0; int h = a.back() - a[0]; while (g < h) { int m = g + (h - g) / 2; if (f0(a, m, k)) { h = m; } else { g = m + 1; } } return g; } int main() { int n, k; cin >> n >> k; vector<int> a(n, 0); for (int i = 0; i < n; i++) { cin >> a[i]; } cout << f(a, k) << endl; return 0; } 假设输入总是合法的且 ,完成下面的判断题和单选题: 判断题 将第 2424 行的 m 改为 m - 1,输出有可能不变,而剩下情况为少 11。() 将第 2222 行的 g + (h - g) / 2 改为 (h + g) >> 1,输出不变。() 当输入为 5 7 2 -4 5 1 -3,输出为 5。() 单选题 设 aa 数组中最大值减最小值加 11 为 AA,则 f 函数的时间复杂度为()。 将第 1010 行中的 > 替换为 >=,那么原输出与现输出的大小关系为()。 当输入为 5 8 2 -5 3 8 -12,输出为()。 1. A.正确 B.错误 2. A.正确 B.错误 3. A.正确 B.错误 4. 5. A. 一定小于 B.一定小于等于且不一定小于 C.一定大于等于且不一定大于 D.以上三种情况都不对. 6. A.13 B.14 C.8 D.15](/d/file/p/2024/05-29/19324899b83211c5497c350681036094.png)
判断题
-
将第 2424 行的
m
改为m - 1
,输出有可能不变,而剩下情况为少 11。() -
将第 2222 行的
g + (h - g) / 2
改为(h + g) >> 1
,输出不变。() -
当输入为
5 7 2 -4 5 1 -3
,输出为5
。()
单选题
-
设 aa 数组中最大值减最小值加 11 为 AA,则
f
函数的时间复杂度为()。 -
将第 1010 行中的
>
替换为>=
,那么原输出与现输出的大小关系为()。 -
当输入为
5 8 2 -5 3 8 -12
,输出为()。
1.
A.正确
B.错误
2.
A.正确
B.错误
3.
A.正确
B.错误
4.
5.
A. 一定小于
B.一定小于等于且不一定小于
C.一定大于等于且不一定大于
D.以上三种情况都不对.
6.
A.13
B.14
C.8
D.15