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

9.9 KiB
Raw Blame History

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

一、单项选择题

答案速查

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

逐题解析

第1题

答案: B

解析: 全国青少年计算机程序设计竞赛(NOI)由中国计算机学会于 1984 年创办。

第2题

答案: A

解析: 一个字节为 8 位,因此 32 位整型变量占 32/8=4 个字节。

第3题

答案: D

解析: 前三项均等于十进制 $617$:$(269)_{16}=617$,$(1151)_8=617$。而 $(1001101011)_2=512+64+32+8+2+1=619$,因此 D 不同。

第4题

答案: A

解析: 各层结点数依次为 $1,k,k^2,\ldots,k^h$,相加得到等比数列和 $1+k+\cdots+k^h=(k^{h+1}-1)/(k-1)$。

第5题

答案: B

解析: s 初始为 a,循环共执行 c 次,每次加 $1$,所以结束后 s=a+c。

第6题

答案: C

解析: 共有 2048\times1024 个像素,每个像素占 32/8=4 字节。总空间为 2048\times1024\times4=8\times1024^2 字节,即 $8\ \mathrm{MB}$。

第7题

答案: D

解析: 由握手定理,所有顶点的度数之和为边数的两倍。设顶点数为 $n$,则 $2n=2\times16$,得到 $n=16$。

第8题

答案: C

解析: 1 和 n 都是整数,因此 1/n 执行整数除法;当 n>1 时结果为 $0$。应将分子写为 1.0 等浮点数,才能得到所需的小数值。

第9题

答案: B

解析: 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。

第10题

答案: A

解析: 先从 5 种颜色中选出形成完整手套的 2 种,再从剩余 3 种中选出 2 种,各取一只。单只手套分别有左右手两种选择,因此共有 \binom52\binom32\times2^2=120 种。

第11题

答案: B

解析: 根的高度为 1 时,高度为 h 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。由于 $32\le61\le63$,所以高度为 $6$。

第12题

答案: C

解析: IPv4 地址的每一段为 8 位,取值范围是 0 至 $255$。选项 C 中出现了 256,超出了该范围。

第13题

答案: D

解析: 寄存器位于 CPU 内部,用于暂存操作数、地址及中间结果,是 CPU 的重要组成部分。

第14题

答案: C

解析: POP3、SMTP、IMAP 均用于电子邮件的发送或接收;WTO 是世界贸易组织的英文缩写,不是电子邮件协议。

第15题

答案: C

解析: 采用流水作业:第一道菜在 30 分钟完成,后两道菜各间隔 10 分钟完成。总用时为 30+10+10=50 分钟。

二、阅读程序

程序(1)

程序分析: encoder 先放入 C、S、P,再按字母序补齐其余字母;decoder 是其逆映射。程序把输入字母按这张逆映射表逐个替换。

答案速查

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

答案: √(正确)

解析: 下标为 st[i]-'A',只有大写字母才能保证下标位于 0 至 25 之间。

第17题

答案: ×(错误)

解析: 并非每个字母都会变化,例如字母 Z 的映射仍为 Z,输入 Z 就与输出相同。

第18题

答案: √(正确)

解析: 需要检查是否预先出现的特殊字母 C、S、P 都在前三个位置;后续补入的字母小于当前枚举字母,不会造成遗漏,因此修改该检查上界不影响结果。

第19题

答案: ×(错误)

解析: 只建立前 16 个位置的逆映射会漏掉后续字母,部分输入无法被正确还原,输出可能改变。

第20题

答案: A

解析: 要输出 A、B、C,输入应分别是 encoder[0..2],即 C、S、P,因此输入既有 S 又有 P。

第21题

答案: D

解析: 输出 C、S、P 分别对应输入 P、R、N,所以输入既没有 S,也没有 A。

程序(2)

程序分析: 对每个位置 i,程序输出从该位置向右、连续元素均不大于 a[i] 的最远端点 ans。若当前值比前一个值小,则重新从 i 开始寻找。

答案速查

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

答案: ×(错误)

解析: ans 至少等于 i,但可能恰好等于 i;例如严格递增序列中每次输出就是当前位置,因此不保证严格大于。

第23题

答案: √(正确)

解析: 只有在 ans<n 时才执行递增操作,故 ans 不会超过 $n$。

第24题

答案: √(正确)

解析: 下降时两种条件都会重置;上升时重置为 i 也不会丢失合法的更远端点;相等时两种条件都不重置,因此结果不变。

第25题

答案: √(正确)

解析: ans 是连续满足约束的最远端点。既然已越过 i+1,该位置的值必然不大于 a[i]。

第26题

答案: D

解析: 严格递增时,每轮只需常数次判断,ans 随位置推进,整体时间复杂度为 $O(n)$。

第27题

答案: A

解析: 严格递减时,每个位置都会重置并向右扫描至末尾,总次数为 $n+(n-1)+\cdots+1$,最坏复杂度为 $O(n^2)$。

程序(3)

程序分析: DFS 从每个顶点出发枚举不重复顶点的路径,回溯时撤销访问标记,ans 记录路径权值之和的最大值,即最长简单路径长度。

答案速查

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

答案: √(正确)

解析: 简单无向完全图的所有非对角邻接项都会被输入边覆盖;对角项不会被用于访问已标记的当前顶点,因此可省略这段初始化。

第29题

答案: √(正确)

解析: 所有起点仍会被完整枚举,改变枚举先后不影响最终取到的最大值。

第30题

答案: D

解析: 图中两个连通分量各只有一条权值为 1 的边,最长简单路径长度为 $1$。

第31题

答案: B

解析: 四个顶点的完全图中,每条边权值为 $1$,简单路径至多经过 3 条边,且可以达到,因此输出 $3$。

第32题

答案: B

解析: 顶点 4 孤立,三角形中最长简单路径可取 $2\to3\to1$,长度为 $20+30=50$。

第33题

答案: C

解析: 取路径 $3\to1\to4\to2$,长度为 $50+40+60=150$;枚举其他简单路径也不能得到更大值。

三、完善程序

程序(1)

程序分析: 程序先按区间左端点升序排序,再删除被前面区间包含的区间,随后反复选取左端点不超过当前覆盖终点、且能把覆盖范围向右扩展最远的区间,求覆盖目标区间所需的最少区间数。

答案速查

题号 34 35 36 37 38
答案 B D A A B
第34题

答案: B(A[j].a<A[j-1].a)

解析: 冒泡排序时,若后一个区间的左端点更小,就应与前一个交换,即判断 A[j].a<A[j-1].a。

第35题

答案: D(A[j]=A[j-1];A[j-1]=t;)

解析: t 已保存 A[j],交换应先执行 A[j]=A[j-1],再执行 A[j-1]=t。

第36题

答案: A(A[i].b>A[p-1].b)

解析: 已保留区间的右端点严格递增;只有当前右端点大于最后保留区间的右端点时,才有保留价值。

第37题

答案: A(q+1<n&&A[q+1].a<=r)

解析: 继续检查下一个区间是否存在,且其左端点不超过当前终点 r,才能将 q 移到最后一个可衔接的区间。

第38题

答案: B(r=max(r,A[q].b))

解析: q 指向当前可用区间中右端点最远者,应使用 A[q].b 更新覆盖终点 r。

程序(2)

程序分析: 程序先求每一行的前缀和,枚举子矩阵左右列边界,再把各行在该列区间内的和视为一维数组,用最大连续子段和方法求最大子矩阵和。

答案速查

题号 答案
39 [1][1]
40 rowsum[i][0] = 0
41 rowsum[i][j-1] + matrix[i][j]
42 area = 0
43 rowsum[i][last] - rowsum[i][first-1]
第39题

答案: [1][1]

解析: 答案要求非空子矩阵,初始化为实际元素 matrix[1][1],才能正确处理所有元素均为负数的情况。

第40题

答案: rowsum[i][0] = 0

解析: 每行零个元素的前缀和为零,因此令 rowsum[i][0]=0。

第41题

答案: rowsum[i][j-1] + matrix[i][j]

解析: 第 i 行前 j 个数的和等于前 j-1 个数之和加当前元素,即 rowsum[i][j-1]+matrix[i][j]。

第42题

答案: area = 0

解析: 每次更换列区间后,重新从第一行扫描,当前累加和 area 应重置为零。

第43题

答案: rowsum[i][last] - rowsum[i][first-1]

解析: 第 i 行在闭区间 [first,last] 中的和为 rowsum[i][last]-rowsum[i][first-1]。