CSP-J 初赛模拟卷(第 02 套)
参考答案与解析
--- #### **一、单项选择题** **答案速查** | 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | D | C | D | A | A | D | C | C | | 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | C | A | D | D | D | B | C | **逐题解析** ##### 第1题 **答案:** D **解析:** 打印机将计算机中的信息输出到纸张上,属于输出设备;扫描仪、键盘和鼠标属于输入设备。 ##### 第2题 **答案:** C **解析:** $b$ 位二进制最多表示 $2^b$ 种状态。因为 $2^8=256$,所以至少需要 $8$ 位。 ##### 第3题 **答案:** D **解析:** 若先输出 `c`、`d`,则 `a`、`b` 仍在栈中,且 `b` 位于 `a` 上方。在输出 `a` 之前必须先输出 `b`,因此 `c,d,a,e,b` 不合法。 ##### 第4题 **答案:** A **解析:** 高度为 $5$ 时,前 $4$ 层必须填满,最后一层可从左到右放置 $1$ 至 $16$ 个结点。结点数确定后形态唯一,因此有 $16$ 种形态。 ##### 第5题 **答案:** A **解析:** $(11.01)_2=1\times2^1+1\times2^0+0\times2^{-1}+1\times2^{-2}=3.25$。 ##### 第6题 **答案:** D **解析:** 8 位无符号整数的范围是 $0$ 至 $2^8-1=255$。选项中能表示的数为 $133$ 和 $199$,其中较大的是 $199$。 ##### 第7题 **答案:** C **解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。 ##### 第8题 **答案:** C **解析:** $(101.11)_2=2^2+2^0+2^{-1}+2^{-2}=4+1+0.5+0.25=5.75$。 ##### 第9题 **答案:** C **解析:** 逆序排列的 $5$ 个数共有 $\binom52=10$ 个逆序对。冒泡排序每次相邻交换恰好减少一个逆序对,因此需要 $10$ 次交换。 ##### 第10题 **答案:** A **解析:** 三个数字各不相同时有 $3!=6$ 种。数字 `1` 出现两次时,另一位可选 `2` 或 `3`,共 $2\times3=6$ 种;数字 `2` 出现两次时同样有 $6$ 种。合计 $18$ 种。 ##### 第11题 **答案:** D **解析:** 选项 D 对 $2,6,10,17$ 分别得到 $1,2,3,4$,四个地址互不相同;其余三个哈希函数均产生重复地址。 ##### 第12题 **答案:** D **解析:** 寄存器位于 CPU 内部,用于暂存操作数、地址及中间结果,是 CPU 的重要组成部分。 ##### 第13题 **答案:** D **解析:** 展开递推式可得 $T(n)=T(0)+1+2+\cdots+n=1+n(n+1)/2$,所以时间复杂度为 $O(n^2)$。 ##### 第14题 **答案:** B **解析:** 小于 $100$ 的最大素数为 $97$;$98$、$99$ 和 $100$ 均为合数。 ##### 第15题 **答案:** C **解析:** 当数组已经按非递减顺序排列时,第一趟需比较相邻元素 $n-1$ 次,但不发生交换,`FLAG` 保持为 $1$,随后循环结束。 #### **二、阅读程序** ##### 程序(1) **程序分析:** 程序将 Base64 字符映射为 6 位整数,再将每四个编码字符组合为至多三个原始字节。`ans` 是全局字符数组,输出时按以零结尾的 C 字符串处理。题目规定 `char` 为有符号的 8 位类型。 **答案速查** | 题号 | 16 | 17 | 18 | 19 | 20 | 21 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | × | √ | √ | B | B | C | ###### 第16题 **答案:** ×(错误) **解析:** 限定的字符集合是 Base64 编码的输入字符集;解码结果可以包含空格等其他字符,因此该断言错误。 ###### 第17题 **答案:** √(正确) **解析:** 例如 `YQ==` 解码为 `a`,`YQA=` 解码为 `a` 后跟零字节。用 `%s` 输出时都会在零字节处结束,第二行同为 `a`。 ###### 第18题 **答案:** √(正确) **解析:** `table[0]` 被初始化为全一位模式 `0xff`,在题目规定的有符号 8 位 `char` 中表示 $-1$,转为 `int` 后仍为 $-1$。 ###### 第19题 **答案:** B **解析:** 循环每次处理 $4$ 个输入字符,每轮只进行常数次运算,总时间复杂度为 $O(n)$。 ###### 第20题 **答案:** B **解析:** 将 `Y3Nx` 按 Base64 解码,依次得到字符 `c、s、q`,所以输出 `csq`。 ###### 第21题 **答案:** C **解析:** 该字符串解码为 `ccf 2021`,其中 `ccf` 与年份之间有一个空格,不能省略。 ##### 程序(2) **程序分析:** 每次合并相邻两项,第一分量和第二分量分别相加,代价为两项第一分量之和加上第二分量之差的绝对值。DFS 枚举所有合并顺序并恢复现场,`ans` 保存最大总代价;也可用区间动态规划核对结果。 **答案速查** | 题号 | 22 | 23 | 24 | 25 | 26 | 27 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | × | √ | × | B | C | C | ###### 第22题 **答案:** ×(错误) **解析:** $n=0$ 时不满足递归终止条件,但合并循环也不会执行,函数直接返回,最终输出 $0$,不会因该输入而死循环。 ###### 第23题 **答案:** √(正确) **解析:** 所有输入为零时,每次合并代价均为零,所以任何合并顺序的总代价均为零。 ###### 第24题 **答案:** ×(错误) **解析:** 取 $n=1$,不发生任何合并,输出为 $0$;若唯一输入项大于零,输出就小于该输入值。 ###### 第25题 **答案:** B **解析:** 第一分量全为 $9$、第二分量全为零时,最优顺序依次合并为含 $2,3,\ldots,20$ 项的区间,总代价为 $9(2+3+\cdots+20)=1881$。 ###### 第26题 **答案:** C **解析:** 合并后的第二分量为已有项数的 $5$ 倍。最优链式合并的各次差值为 $5\times0,5\times1,\ldots,5\times28$,总代价为 $2030$。 ###### 第27题 **答案:** C **解析:** 对每个连续区间枚举最后一次合并位置,按合并公式取最大值;对两行均为 $15,14,\ldots,1$ 的数据计算,最大总代价为 $2240$。 ##### 程序(3) **程序分析:** `a[x]=y` 与 `b[y]=x` 维护两侧结点的一一配对,冲突配对会先解除。最后分别统计两数组中的零元素;若当前有 $t$ 对配对,输出为 $2n-2t$。 **答案速查** | 题号 | 28 | 29 | 30 | 31 | 32 | 33 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | 答案 | √ | × | × | × | A | A | ###### 第28题 **答案:** √(正确) **解析:** 第一对正编号结点必定可以配对,之后的更新不会使配对总数降为零,因此 $m>0$ 时最终至少有一对,输出小于 $2n$。 ###### 第29题 **答案:** ×(错误) **解析:** 最终答案为偶数,但某一次执行 `++ans` 后的中间值可以是奇数。例如仅配对 `(1,2)` 时,扫描 `i=1` 就可能使 `ans` 变为 $1$。 ###### 第30题 **答案:** ×(错误) **解析:** 例如输入配对 `(1,2)`、`(3,1)` 后,`a[1]=2`、`b[1]=3`,二者可以同时大于零。 ###### 第31题 **答案:** ×(错误) **解析:** 例如先后输入 `(1,2)`、`(1,3)`,每次均有 `x> 1`) **解析:** 区间更新为 `a=mid+1` 或 `b=mid`,应使用向下取整的中点 `(a+b)>>1`,保证区间收缩。 ###### 第42题 **答案:** B(`cmp(A[mid], p)`) **解析:** 当 `A[mid]` 按同一比较规则小于目标点 `p` 时,目标应在右侧,因此使用 `cmp(A[mid],p)`。 ###### 第43题 **答案:** D(`A[i].x < A[j].x && A[i].y < A[j].y`) **解析:** 要求两点满足 `x`、`y` 坐标均严格递增,以分别作为左下和右上顶点,避免退化矩形和重复计数。