题库首页 › 信息学奥赛 › 题目 12510

完善程序(1) 第1-5题,组合题 (归并第 k 小)已知两个长度均为 n 的有序数组 a1 和 a2(均为递增序,但不保证严格单调递增),并且给定正整数 k(1≤k≤2n),求数组 a1 和 a2 归并排序后的数组里第 k 小的数值。 试补全程序。 #include using namespace std; int solve(int *a1, int *a2, int n, int k) { int left1 = 0, right1 = n - 1; int left2 = 0, right2 = n - 1; while (left1 > 1; int m2 = (left2 + right2) >> 1; int cnt = ① ; if ( ② ) { if (cnt < k) left1 = m1 + 1; else right2 = m2 - 1; } else { if (cnt < k) left2 = m2 + 1; else right1 = m1 - 1; } } if ( ③ ) { if (left1 == 0) { return a2[k - 1]; } else { int x = a1[left1 - 1], ④ ; return std::max(x, y); } } else { if (left2 == 0) { return a1[k - 1]; } else { int x = a2[left2 - 1], ⑤ ; return std::max(x, y); } } }

正确答案:完善程序①答案D。cnt = m1 + m2 + 2(两数组已排在前面的元素数加当前两个)。

试卷来源:2022 CSP-S提高级(第一轮)C++真题

本卷相关题目

在线做题 同科目题库