#mengxiongP3. 二分查找-阅读程序(一)
二分查找-阅读程序(一)
二分查找 - 阅读程序(一)
题目描述
阅读以下程序,回答判断题(第 1-3 题,每题 15 分)和选择题(第 4-6 题,第 4-5 题各 15 分,第 6 题 25 分)。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int n, s, cnt, ans, res;
int a[N], b[N];
bool check(int mid) {
for (int i = 1; i <= n; i++)
b[i] = a[i] + i * mid;
sort(b + 1, b + 1 + n);
res = 0;
for (int i = 1; i <= mid && res <= s; i++)
res += b[i];
return res <= s;
}
int main() {
scanf("%d%d", &n, &s);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
int l = 0, r = n;
while (l <= r) {
int mid = (l + r) >> 1;
if (check(mid)) cnt = mid, ans = res, l = mid + 1;
else r = mid - 1;
}
printf("%d %d\n", cnt, ans);
return 0;
}
判断题
第 1 题 若输入 4 100 1 2 5 6,则程序的输出为 4 54。{{ select(1) }}
- 正确
- 错误
第 2 题 对于任意的输入,cnt 的一个必定合法的取值为 n。{{ select(2) }}
- 正确
- 错误
第 3 题 这个程序的时间复杂度为 O(n log n)。{{ select(3) }}
- 正确
- 错误
选择题
第 4 题 当输入为 3 11 2 3 5 时,程序的输出为( )。{{ select(4) }}
- A. 1 11
- B. 2 11
- C. 3 8
- D. 0 0
第 5 题 代码中 check 函数的作用是什么?( ){{ select(5) }}
- A. 判断当前数组是否有序
- B. 检查是否能从数组中选出 mid 个数,使得它们的总和小于或等于 s
- C. 判断数组的所有元素是否大于某个值
- D. 计算数组元素的平均值
第 6 题(25 分) 变量 cnt 和 ans 的作用分别是什么?( ){{ select(6) }}
- A. cnt 记录满足条件的最大 mid 值,ans 记录对应的总和
- B. cnt 记录数组的长度,ans 记录数组中的最大值
- C. cnt 表示排序后的最小值索引,ans 记录当前结果的最小值
- D. cnt 表示满足条件的元素个数,ans 记录最终的目标值