整理 NOI 初赛资料目录并标准化 CSP-J 模拟卷

- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析
- 补充SVG图示,统一试题排版并导出打印PDF
- 重整初赛专题训练与复习资料目录,清理旧版源文件
This commit is contained in:
xiaolinquan committed 2026-11-06 17:50:51 +08:00
1 parent fe5c7ffd58
commit 0af92a68d9
216 files changed
+12743 -1272

No files matched your search

@@ -0,0 +1,338 @@
<center><font size="6"><b>CSP-J 初赛模拟卷(第 16 套)</b></font></center>
<center><font size="4"><b>参考答案与解析</b></font></center>
---
#### **一、单项选择题**
**答案速查**
| 题号 | 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`。