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

9.6 KiB
Raw Blame History

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

一、单项选择题

答案速查

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

逐题解析

第1题

答案: C

解析: PENTIUM(奔腾)、酷睿和赛扬均为 CPU 的产品系列或型号名称。

第2题

答案: D

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

第3题

答案: D

解析: 先将 d 入栈再出栈,然后依次压入 a、b、c,即可使栈内从底到顶为 a、b、c,因此 D 可行。其余选项不能在保留这三个元素的同时得到所要求的栈内顺序。

第4题

答案: B

解析: 将三进制数按位权展开,可得 $3Z=6X+2Y$。结合数字范围及首位不为零,得到 $X=1,Y=0,Z=2$。于是 $(10)_3\times(21)_3=(210)_3$,对应 ZXY。

第5题

答案: A

解析: 5 层满二叉树的结点数为 $1+2+4+8+16=2^5-1=31$。

第6题

答案: A

解析: 先判断中间位置是否为峰顶,成立则执行 c 返回;若中间位置处于上升段,则执行 a 搜索右侧;否则执行 b 搜索左侧。顺序为 c、a、b。

第7题

答案: B

解析: 后缀表达式先写操作数,再写对应运算符。b+c 转为 bc+,随后与 a、d 相乘,得到 abc+*d*。

第8题

答案: C

解析: 先合并权值 300 和 $400$,得到新结点 $700$。按同权时优先选择合并结点的规则,再合并 600 和这个新结点,最后与原权值 700 合并。“也”所在叶结点的深度为 $3$,编码长度为 $3$。

第9题

答案: B

解析: 由后序遍历末尾确定根 A,再借助中序遍历递归划分左右子树,得到前序遍历 ABDEGHJCFI。

第10题

答案: B

解析: s 从 a 开始,循环执行 c 次加一操作,因此最终为 s=a+c。

第11题

答案: A

解析: A_1 的未访问邻接点为 $A_3$,深度优先搜索不能在访问 A_1 后跳过 A_3 而先访问 $A_2$,因此 A 不可能。

第12题

答案: C

解析: 顺序存储且根下标为 1 时,下标为 i 的结点的左右孩子下标分别为 $2i$、$2i+1$。因此下标为 k 的结点,其父结点下标为 $\lfloor k/2\rfloor$。

第13题

答案: C

解析: 洗、切、炒可以对不同的菜进行流水作业。第一道菜需 30 分钟,之后每隔 10 分钟完成一道,三道菜共需 50 分钟。

第14题

答案: C

解析: 有向图中,指向该顶点的边数为入度,从该顶点出发的边数为出度,顶点的度定义为二者之和。

第15题

答案: C

解析: $1949\bmod10=9$,对应天干“己”;$1949\bmod12=5$,对应地支“丑”,因此为己丑年。

二、阅读程序

程序(1)

程序分析: 利用恒等式 $u+v-(u\mathbin{&}v)=u\mathbin{|}v$,程序在所有数值不相同的元素对中寻找最大的按位或值;若不存在这样的元素对,保留初值 $-1$。

答案速查

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

答案: ×(错误)

解析: 数组合法下标为 0 至 $999$,因此输入 n=1000 时仍不会越界;不是必须严格小于 $1000$。

第17题

答案: ×(错误)

解析: 若所有输入值都相同,条件始终不成立,ans 保持为 $-1$,所以输出不一定非负。

第18题

答案: √(正确)

解析: 例如序列 2,1,原循环会处理“较小值在后、较大值在前”的有序对;限制 j=i+1 会漏掉该比较,输出可能改变。

第19题

答案: √(正确)

解析: 按位或具有交换性。把严格小于改为不等于只会同时处理反向的一对,不会改变最大值。

第20题

答案: C

解析: 若出现 $128$,只要与某个不同值配对,其按位或的结果就至少为 $128$;若全部为 128 则输出为 $-1$。两种情况都不可能得到 $127$。

第21题

答案: C

解析: 按位或结果为偶数,说明参与得到该结果的两个数最低位均为零,因此输入中至少有两个偶数。

程序(2)

程序分析: 每个区间取最小元素为根,递归处理左右区间,最终计算各结点深度与对应 b 值的乘积之和,可视为在最小笛卡尔树上求加权深度和。

答案速查

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

答案: ×(错误)

解析: 即使最小值重复,程序也会选择扫描到的第一个最小值作为分界点,左右递归区间仍严格缩小,因此重复本身不会导致错误。

第23题

答案: √(正确)

解析: 每个结点的贡献都是 depth*b[mink],当所有 b 均为零时,输出必为零。

第24题

答案: A

解析: 最坏情况下每次最小值都位于端点,扫描次数为 $100+99+\cdots+1=5050$,最接近 $5000$。

第25题

答案: D

解析: 最好情况下形成尽量平衡的树。100 个结点的最小深度和为 $580$,相应扫描总次数也为 $580$,最接近 $600$。

第26题

答案: D

解析: 将权值 1 至 10 依次安排在深度 1 至 10 的链上,可得到最大加权深度和 $1^2+2^2+\cdots+10^2=385$。

第27题

答案: B

解析: 按层尽量填满的树使总深度最小,得到 $1\times1+2\times2+3\times4+4\times8+5\times16+6\times32+7\times37=580$。

程序(3)

程序分析: A[i][j] 由杨辉三角递推得到组合数 \binom ij 对 MOD 取模的值;sum 为该数组的二维前缀和,同样对 MOD 取模。

答案速查

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

答案: ×(错误)

解析: 对角线元素为 $A[i][i]=\binom ii=1$,并不是零。

第29题

答案: ×(错误)

解析: 该递推计算的是组合数而非排列数,且保存的是组合数对 MOD 取模后的值。

第30题

答案: ×(错误)

解析: 前缀和取模后可能从较大的值回绕到较小值,因此不能保证所述单调关系。

第31题

答案: √(正确)

解析: 在取模前额外加一个 MOD,不会改变对 MOD 取模后的余数。

第32题

答案: C

解析: 前 10 行的最大组合数为 $\binom{10}5=252$,这些值均小于模数,因此无需考虑取模改变数值。

第33题

答案: C

解析: 查询为 sum[5][3],即将前 5 行、前 3 列的组合数求和,结果为 $1+3+7+14+25=50$。

三、完善程序

程序(1)

程序分析: 函数跳过非数字字符,单独记录负号,然后逐位将十进制字符转换为整数;返回前按符号取正或取负。

答案速查

题号 答案
34 cin.get()
35 num = c - '0'
36 c >= '0' && c <= '9'
37 num = num * 10 + c - '0'
38 num = -num
第34题

答案: cin.get()

解析: 尚未遇到数字或负号时,应继续读取下一个字符,调用 cin.get()。

第35题

答案: num = c - '0'

解析: 若第一个有效字符不是负号,它就是首位数字,应先令 num=c-'0'。

第36题

答案: c >= '0' && c <= '9'

解析: 后续只要字符仍在 0 至 9 的范围内,就继续处理,条件为 c>='0' && c<='9'。

第37题

答案: num = num * 10 + c - '0'

解析: 原数乘 10 后加上新的一位,执行 num=num*10+c-'0'。

第38题

答案: num = -num

解析: 若出现负号,返回前执行 num=-num。

程序(2)

程序分析: 程序在整数值域中二分中位数。对于候选 mid,统计严格大于它的元素个数;若多于半数,则中位数更大,否则中位数不超过当前值。

答案速查

题号 答案
39 rbound > lbound
40 count = 0
41 x[i] > mid
42 count++
43 rbound = mid
第39题

答案: rbound > lbound

解析: 当左右边界尚未重合时继续二分,条件为 rbound>lbound。

第40题

答案: count = 0

解析: 每次更换候选值后,应重新统计,令 count=0。

第41题

答案: x[i] > mid

解析: 应统计严格大于 mid 的数,即 x[i]>mid。若用 >=,例如序列 1,2,3 会错误地把答案推到 $3$。

第42题

答案: count++

解析: 每发现一个满足条件的元素,就使计数加一,执行 count++。

第43题

答案: rbound = mid

解析: 严格大于 mid 的元素不超过一半时,中位数至多为 mid,应执行 rbound=mid。