整理 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 初赛模拟卷(第 04 套)</b></font></center>
<center><font size="4"><b>参考答案与解析</b></font></center>
---
#### **一、单项选择题**
**答案速查**
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | D | C | D | B | A | A | C | C |
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | B | B | C | D | A | B | C |
**逐题解析**
##### 第1题
**答案:** D
**解析:** Linux 可执行文件没有统一的默认扩展名;能否执行主要由文件格式及执行权限决定,因此前三项均不符合。
##### 第2题
**答案:** C
**解析:** 数组已经有序时,第一趟仍需进行 $n-1$ 次相邻比较。由于没有交换,`FLAG` 保持为 $1$,外层循环随后结束。
##### 第3题
**答案:** D
**解析:** 按字节寻址时,$32$ 位地址总线可表示 $2^{32}$ 个地址,对应 $2^{32}$ 字节,即 $4\ \mathrm{GB}$。
##### 第4题
**答案:** B
**解析:** 无向完全图中,每两个不同顶点之间恰有一条边,因此边数为 $\binom72=7\times6/2=21$。
##### 第5题
**答案:** A
**解析:** CPU 负责执行运算和控制程序运行。易失性存储器断电后可能丢失数据,屏幕尺寸与分辨率不具有一一对应关系,接入互联网也不限于 Wi-Fi。
##### 第6题
**答案:** A
**解析:** 从 $A_0$ 进入 $A_1$ 后,$A_1$ 的未访问邻接点 $A_3$ 必须先被访问,不能直接转到与 $A_1$ 不相邻的 $A_2$,因此选项 A 不可能。
##### 第7题
**答案:** C
**解析:** 顺序存储且根下标为 $1$ 时,下标为 $i$ 的结点的左右孩子下标分别为 $2i$、$2i+1$。因此下标为 $k$ 的结点,其父结点下标为 $\lfloor k/2\rfloor$。
##### 第8题
**答案:** C
**解析:** IPv4 地址的每一段为 $8$ 位,取值范围是 $0$ 至 $255$。选项 C 中出现了 `256`,超出了该范围。
##### 第9题
**答案:** B
**解析:** 将三进制数按位权展开,可得 $3Z=6X+2Y$。结合数字范围及首位不为零,得到 $X=1,Y=0,Z=2$。于是 $(10)_3\times(21)_3=(210)_3$,对应 `ZXY`。
##### 第10题
**答案:** B
**解析:** 将三个盘子中的苹果数按从大到小排列,可得 $(7,0,0)$、$(6,1,0)$、$(5,2,0)$、$(5,1,1)$、$(4,3,0)$、$(4,2,1)$、$(3,3,1)$、$(3,2,2)$,共 $8$ 种。
##### 第11题
**答案:** C
**解析:** 先合并权值 $300$ 和 $400$,得到新结点 $700$。按同权时优先选择合并结点的规则,再合并 $600$ 和这个新结点,最后与原权值 $700$ 合并。“也”所在叶结点的深度为 $3$,编码长度为 $3$。
##### 第12题
**答案:** D
**解析:** 递推式展开后为 $T(n)=1+\sum_{i=1}^{n}i=1+n(n+1)/2$,所以时间复杂度为 $O(n^2)$。
##### 第13题
**答案:** A
**解析:** 只打开 `B`、关闭其余阀门时,水能沿对应管道到达果树,且不会从 `A` 处流失,因此选 A。
##### 第14题
**答案:** B
**解析:** $10000=2^4\times5^4$。在 $1$ 至 $10000$ 中,去掉能被 $2$ 或 $5$ 整除的数,并加回被重复扣除的 $10$ 的倍数,得到 $10000-5000-2000+1000=4000$ 个。
##### 第15题
**答案:** C
**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。
#### **二、阅读程序**
##### 程序(1)
**程序分析:** `num[i]` 表示以第 `i` 个元素结尾的最长严格递增子序列长度。程序尝试由前面更小的元素转移,最后取所有 `num[i]` 的最大值。
**答案速查**
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | × | √ | × | √ | D | B |
###### 第16题
**答案:** ×(错误)
**解析:** 算法只比较元素大小,负数同样可以参与比较,不会仅因输入为负数而出错。
###### 第17题
**答案:** √(正确)
**解析:** 长度为 $n$ 的序列,其子序列最多包含 $n$ 个元素,因此 `ans<=n`。
###### 第18题
**答案:** ×(错误)
**解析:** 例如序列 `1,2` 中,初始两项的 `num` 都为 $1$;必须允许相等时更新,才能把第二项改为 $2$。改成严格大于后会漏掉这次转移。
###### 第19题
**答案:** √(正确)
**解析:** 当 `num[i]==ans` 时,无论是否再次赋值,`ans` 的数值都不变,因此修改不影响最大值。
###### 第20题
**答案:** D
**解析:** 所有数相等时,不存在严格递增的相邻选取关系,最长严格递增子序列只能取一个元素,输出 $1$。
###### 第21题
**答案:** B
**解析:** 样例的动态规划长度依次为 $1,1,2,3,4,3,2,4,5,3$,最大值为 $5$;例如可取 `2,5,7,10,15`。
##### 程序(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)
**程序分析:** 程序对可切出的整数长度进行二分。长度为 `mid` 时,第 `i` 根绳子可切出 `len[i]/mid` 段;总段数随候选长度增大而不增加,满足二分判定的单调性。
**答案速查**
| 题号 | 答案 |
| :---: | :--- |
| 34 | `count = count + len[i]` |
| 35 | `count < m` |
| 36 | `lbound < ubound` |
| 37 | `(lbound + ubound + 1) / 2` |
| 38 | `count = count + len[i] / mid` |
###### 第34题
**答案:** `count = count + len[i]`
**解析:** 先累加绳子总长度,等价于计算每段长度为 $1$ 时最多能切出的段数。
###### 第35题
**答案:** `count < m`
**解析:** 若总长度仍小于所需段数 `m`,则即使每段仅长 $1$ 也无法满足要求,应判定失败。
###### 第36题
**答案:** `lbound < ubound`
**解析:** 候选上下界尚未重合时继续二分,故条件为 `lbound<ubound`。
###### 第37题
**答案:** `(lbound + ubound + 1) / 2`
**解析:** 可行时更新为 `lbound=mid`,需使用向上取整的中点 `(lbound+ubound+1)/2`,避免只差 $1$ 时陷入死循环。
###### 第38题
**答案:** `count = count + len[i] / mid`
**解析:** 当前绳子能提供 `len[i]/mid` 段,应把它累加到总段数 `count` 中。
##### 程序(2)
**程序分析:** 程序按字典序生成从 $n$ 个数中选出 $m$ 个数的无重复排列。每次从右向左寻找可增大的位置,释放旧值,再把后缀填成最小的可用排列。
**答案速查**
| 题号 | 答案 |
| :---: | :--- |
| 39 | `false` |
| 40 | `used[data[i]] = false` |
| 41 | `j` |
| 42 | `n` |
| 43 | `break` |
###### 第39题
**答案:** `false`
**解析:** 每轮先假定不存在后继排列,将 `flag` 置为 `false`;找到合法增大位置后再改为真。
###### 第40题
**答案:** `used[data[i]] = false`
**解析:** 尝试替换第 `i` 位之前,必须释放其原值,执行 `used[data[i]]=false`。
###### 第41题
**答案:** `j`
**解析:** `j` 是当前找到的更大且尚未使用的数,应赋给 `data[i]`。
###### 第42题
**答案:** `n`
**解析:** 候选数字范围为 $1$ 至 $n$,因此补后缀时内层枚举上界应为 `n`。
###### 第43题
**答案:** `break`
**解析:** 已找到并构造出紧邻的下一个排列后,应退出从右向左的扫描,执行 `break`。