1 条题解
-
0
一、单项选择题解析
-
B | 函数 f 中定义的是局部变量 x,不会改变全局变量 x,所以输出 5。
-
C | ,,两者之和为 92。
-
C | p 指向数组首元素,
*(p+2)等价于a[2],值为 6。 -
D | 队列先进先出,两次 pop 分别弹出 4 和 7,最后队列为 9, 1。
-
B | 每个非叶子结点都有 2 个孩子的二叉树满足总结点数为 ,其中 为叶子数,所以答案为 19。
-
C | 无向简单图最多有 条边。
-
C | 需要满足 1 在 3 前,2 在 3 和 4 前,共有 5 种拓扑排序。
-
A | 后缀表达式按栈计算,先算 ,再加 ,最后减 。
-
B | 选 3 个互不相邻的数,方案为 {1, 3, 5}, {1, 3, 6}, {1, 4, 6}, {2, 4, 6},共 4 种。
-
C | 依次计算 , , , 。
-
B | r 是 x 的引用,执行
r = y相当于执行x = y。 -
B | 内层循环执行次数为 ,总次数约为 ,复杂度为 。
-
B | 二分查找通常用于具有单调性的序列或答案空间。
-
D | 哈夫曼合并过程为 4 + 6 = 10,8 + 10 = 18,12 + 18 = 30,20 + 30 = 50,频率为 4 的字符深度为 4。
-
C | set 可以维护有序集合,并支持查找元素是否存在。
二、阅读程序解析
阅读程序(一)
程序实现高精度加法。程序先把两个字符串反转,从低位到高位逐位相加并处理进位,得到的结果最初是逆序的,因此最后必须再反转一次。
-
A(正确) | 输入 99 和 1,高精度加法结果为 100。
-
A(正确) | 题目假设输入除数字0外没有前导零,程序正确处理进位,输出不会含有前导零。
-
B(错误) | 删去最后一次 reverse 后,结果会是逆序的,无法正确输出两数之和。
-
C | 12345 + 6789 = 19134。
-
C | 循环次数取决于较长的字符串长度,时间复杂度为 。
阅读程序(二)
程序使用邻接矩阵和队列进行广度优先搜索(BFS)。由于 BFS 按照距离从小到大扩展,所以第一次到达某个点时得到的就是从 1 号点到它的最少边数。
-
A(正确) | 若存在边 (1, n),则从 1 号点一步即可到达 n 号点,输出 1。
-
B(错误) | 程序输出的是从 1 号点到 n 号点经过的最少边数,但如果无法到达则输出 -1,题目表述不够准确。
-
A(正确) | 如果 1 号点无法到达 n 号点,d[n] 保持初始值 -1,程序输出 -1。
-
B | 从 1 到 5 的最短路径为 1→2→5,经过 2 条边。
-
C | 从 1 到 6 的最短路径为 1→2→3→4→5→6,经过 5 条边。
-
D | 使用邻接矩阵存储,每个点出队时需要遍历所有 n 个点检查是否有边,时间复杂度为 。
阅读程序(三)
程序实现最长严格上升子序列的朴素动态规划。 表示以第 个数结尾的最长严格上升子序列长度,而不是前 个数整体的答案;整体答案需要用 ans 维护。
-
A(正确) | 输入 1 2 3 4 5 是严格上升序列,最长上升子序列长度为 5。
-
B(错误) | 表示以第 个数结尾的最长上升子序列长度,不是前 个数整体的答案。
-
A(正确) | 条件是
a[j] < a[i],严格小于,所以相等的元素不能同时出现在同一个上升子序列中。 -
B | 序列 3 1 2 1 8 5 的最长上升子序列为 1 2 8 或 1 2 5,长度为 3。
-
B | 序列 5 1 6 2 7 3 8 4 的最长上升子序列为 1 2 3 4 或 1 2 3 8 等,长度为 4。
-
C | 序列 2 1 4 3 5 7 6 8 的最长上升子序列为 1 3 5 7 8 或 1 3 5 6 8,长度为 5。
三、完善程序解析
完善程序(一)
程序实现归并排序。递归处理左右两段后,用双指针将两个有序段合并到辅助数组 b 中,再复制回原数组 a。
-
A | 递归终止条件是
l >= r,即区间长度为 1 或无效时直接返回。 -
B | 右半部分从 m + 1 开始,所以填
m + 1。 -
C | 合并时两个指针都要在有效范围内,条件是
i <= m && j <= r。 -
A | 将左半部分剩余元素复制到辅助数组,填
b[k++] = a[i++]。 -
B | 将辅助数组 b 中的有序结果复制回原数组 a,填
a[i] = b[i]。
完善程序(二)
程序实现拓扑排序。读入边 时, 的入度加 1;先将所有入度为 0 的点入队。每弹出一个点,就删除它发出的边,使对应终点入度减 1。若最终输出点数不足 ,说明图中存在环。
-
A | 读入边 后,需要增加 的入度,填
d[v]++。 -
C | 拓扑排序从入度为 0 的点开始,填
d[i] == 0。 -
B | 从队列头部取出元素,填
q[hd++]。 -
A | 删除边后,终点的入度减 1,填
d[v]--。 -
D | 若输出的点数不足 ,说明存在环,填
tot < n。
-
- 1
信息
- ID
- 7374
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 80
- 已通过
- 4
- 上传者