Files
cpp-courseware/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第06套-答案解析.md
T
xiaolinquan 0af92a68d9 整理 NOI 初赛资料目录并标准化 CSP-J 模拟卷
- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析
- 补充SVG图示,统一试题排版并导出打印PDF
- 重整初赛专题训练与复习资料目录,清理旧版源文件
2026-11-06 17:50:51 +08:00

9.3 KiB
Raw Blame History

CSP-J 初赛模拟卷(第 06 套)
参考答案与解析

一、单项选择题

答案速查

题号 1 2 3 4 5 6 7 8
答案 B D D C A A B C
题号 9 10 11 12 13 14 15
答案 D A B D D C C

逐题解析

第1题

答案: B

解析: NOI 是全国青少年信息学奥林匹克竞赛的英文简称。

第2题

答案: D

解析: 按题目采用的 1024 进位约定,$1\ \mathrm{TB}=1024^4\ \mathrm{B}=2^{40}\ \mathrm{B}$。

第3题

答案: D

解析: 将两个二进制数对齐后逐位进行与运算,只有两位均为 1 时结果才为 $1$,得到 01 0010 1000 0011。

第4题

答案: C

解析: 根深度为 1 时,深度为 h 的二叉树至多有 2^{h-1} 个叶结点。$2^{10}=1024<2011\le2048=2^{11}$,所以最小深度为 $12$。

第5题

答案: A

解析: 单峰数组可用二分法寻找峰顶:先检查中间位置是否同时大于两侧元素;若不是,则沿数值上升的方向缩小搜索区间。按该控制流程,三段代码的执行顺序为 c、a、b。

第6题

答案: A

解析: 先给每个班分配一个名额,再将剩余 3 个相同名额分给 7 个不同班级。由隔板法,方案数为 $\binom{3+7-1}{7-1}=\binom96=84$。

第7题

答案: B

解析: 生成树包含原图全部 6 个顶点,而任意 n 个顶点的树均有 n-1 条边,因此边数为 $5$。

第8题

答案: C

解析: 对非负的 x,先乘 $100$,加 0.5 后转为整数以完成四舍五入,再除以 100.0 恢复数量级,对应选项 C。

第9题

答案: D

解析: 两个数分别为十进制 36 和 $20$,相加为 $56$,对应的 8 位二进制表示是 00111000。

第10题

答案: A

解析: 字符串是由字符组成的特殊线性表,可以用数组存储;长度可以为零。含空格字符的串仍含有元素,不是空串。

第11题

答案: B

解析: 队列在队尾插入、队头删除,遵循先进先出原则。

第12题

答案: D

解析: 代入给定布尔值后,A、B、C 均为假;D 中 x\land y 为真,因此整个逻辑或表达式为真。

第13题

答案: D

解析: 打印机将计算机处理结果输出为纸质内容,属于输出设备。

第14题

答案: C

解析: “复制”将所选文件的信息放入剪贴板,以供后续粘贴操作使用,同时保留原位置的文件。

第15题

答案: C

解析: 三人的选择相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。

二、阅读程序

程序(1)

程序分析: 递归满足 $\operatorname{luo}(n,m)=\sum_{0\le i<m,\ i\text{ 为偶数}}\operatorname{luo}(n-1,i)$,边界为 n<=1 或 m<2。gu 以 -1 表示未计算,实现记忆化搜索。

答案速查

题号 16 17 18 19 20 21
答案 × √ √ √ B A
第16题

答案: ×(错误)

解析: 初次输入的 m 可以是奇数;递归产生的后续参数才由偶数循环变量 i 给出。

第17题

答案: √(正确)

解析: 当 m 为偶数时,改为 <= 会多计算 i=m 这一项。例如 luo(2,2) 会由 1 变为 $2$。

第18题

答案: √(正确)

解析: 删除的是记忆化的读取和写入,递归式与边界不变,因此结果相同,但运行时间可能显著增加。

第19题

答案: √(正确)

解析: 在题目的补码整数模型中,将每个字节置为 255 会使每个 int 的所有位均为 $1$,其值为 $-1$,与逐项赋值效果一致。

第20题

答案: B

解析: 输入为 4 8。由递推式可得 luo(4,8)=luo(3,0)+luo(3,2)+luo(3,4)+luo(3,6)=1+1+2+4=8。

第21题

答案: A

解析: 记忆化后至多有 O(nm) 个状态,每个状态枚举 O(m) 个转移,时间复杂度为 $O(nm^2)$。

程序(2)

程序分析: 程序模拟长除法,b 保存商的各位,a 保存待除数(余数乘十)。若待除数重复,就找到了循环节;若余数变为零,则小数终止。

答案速查

题号 22 23 24 25 26 27
答案 × √ √ × C D
第22题

答案: ×(错误)

解析: 当 n==m 且 m!=0 时,整数部分为 $1$、余数为零,可以正常结束,不要求两个输入不同。

第23题

答案: √(正确)

解析: 程序包含整数除法和取模,除数 m 必须非零。

第24题

答案: √(正确)

解析: 循环可因检测到重复待除数而执行 break,也可因余数为零而使 do...while 条件不成立,共有两种退出途径。

第25题

答案: ×(错误)

解析: 例如输入 1 3 时,会出现待除数 $10$,已经大于初始的 $n=1$,因此该限制不成立。

第26题

答案: C

解析: $11/8=1.375$,是有限小数,不需循环节括号,因此输出 1.375。

第27题

答案: D

解析: 输入为 5 13,$5/13=0.\overline{384615}$,输出为 0.(384615),对应 D。

程序(3)

程序分析: 每次合并相邻两项,第一分量和第二分量分别相加,代价为两项第一分量之和加上第二分量之差的绝对值。DFS 枚举所有合并顺序并恢复现场,ans 保存最大总代价;也可用区间动态规划核对结果。

答案速查

题号 28 29 30 31 32 33
答案 × √ × B C C
第28题

答案: ×(错误)

解析: n=0 时不满足递归终止条件,但合并循环也不会执行,函数直接返回,最终输出 $0$,不会因该输入而死循环。

第29题

答案: √(正确)

解析: 所有输入为零时,每次合并代价均为零,所以任何合并顺序的总代价均为零。

第30题

答案: ×(错误)

解析: 取 $n=1$,不发生任何合并,输出为 $0$;若唯一输入项大于零,输出就小于该输入值。

第31题

答案: B

解析: 第一分量全为 $9$、第二分量全为零时,最优顺序依次合并为含 2,3,\ldots,20 项的区间,总代价为 $9(2+3+\cdots+20)=1881$。

第32题

答案: C

解析: 合并后的第二分量为已有项数的 5 倍。最优链式合并的各次差值为 $5\times0,5\times1,\ldots,5\times28$,总代价为 $2030$。

第33题

答案: C

解析: 对每个连续区间枚举最后一次合并位置,按合并公式取最大值;对两行均为 15,14,\ldots,1 的数据计算,最大总代价为 $2240$。

三、完善程序

程序(1)

程序分析: 程序扫描原字符串,把所有非数字字符依次复制到前面,用 j 记录保留字符数,最后只输出这 j 个字符,从而删除全部数字。

答案速查

题号 答案
34 ||
35 j++
36 j
37 s[i]
第34题

答案: ||

解析: 不属于数字的条件是小于字符 0 或大于字符 9,应使用逻辑或运算符 ||。

第35题

答案: j++

解析: 写入一个保留字符后,下一个写入位置需向后移动,执行 j++。

第36题

答案: j

解析: j 就是删除数字后保留下来的字符数,应作为函数返回值。

第37题

答案: s[i]

解析: 保留字符已经依次存入 s[0..len-1],输出时逐个访问 s[i]。

程序(2)

程序分析: 将排列值映射到其原位置,按原位置建立双向链表,再按数值从小到大删除相应结点。删除某位置时,尚在其右边的最近结点就是该位置右侧第一个更大的元素。

答案速查

题号 答案
38 a[x] = i
39 i+1
40 R[a[i]]
41 a[i]
42 R[i]
第38题

答案: a[x] = i

解析: 读到位置 i 的值为 x,应记录值 x 所在的位置,即 a[x]=i。

第39题

答案: i+1

解析: 初始按位置顺序相连,位置 i 的右邻为 i+1,最后一个结点的右邻为哨兵 n+1。

第40题

答案: R[a[i]]

解析: 删除 a[i] 时,其右邻的左指针应越过该结点,故左侧下标为 R[a[i]]。

第41题

答案: a[i]

解析: 其左邻的右指针也应越过当前结点,接到 R[a[i]],所填下标为 a[i]。

第42题

答案: R[i]

解析: R[i] 已保留位置 i 右边第一个更大元素的位置;不存在时为哨兵 n+1。