整理 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,334 @@
<center><font size="6"><b>CSP-J 初赛模拟卷(第 07 套)</b></font></center>
<center><font size="4"><b>参考答案与解析</b></font></center>
---
#### **一、单项选择题**
**答案速查**
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | A | D | A | A | A | C | C | A |
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | C | B | C | A | C | B | A |
**逐题解析**
##### 第1题
**答案:** A
**解析:** 早期电子计算机首先用于科学与工程中的数值计算,例如数值表和复杂算式的计算。
##### 第2题
**答案:** D
**解析:** 将两个二进制数对齐后逐位进行与运算,只有两位均为 $1$ 时结果才为 $1$,得到 `01 0010 1000 0011`。
##### 第3题
**答案:** A
**解析:** 存储单元的唯一标识称为地址,CPU 根据地址读写相应的存储单元。
##### 第4题
**答案:** A
**解析:** 每两轮形成 `ASDFasdf` 的 $8$ 字符循环。$81\bmod8=1$,因此第 $81$ 个字符是大写 `A`。
##### 第5题
**答案:** A
**解析:** 所需空间为 $800\times600\times16/8=960000$ 字节,即 $960000/1024=937.5\ \mathrm{KB}$。
##### 第6题
**答案:** C
**解析:** 先将第一个数作为当前最大值,再依次与其余 $N-1$ 个数比较。每次比较至多排除一个候选最大值,因此至少需要 $N-1$ 次比较。
##### 第7题
**答案:** C
**解析:** 在题目的理论模型中,机器字长和地址宽度不同,会导致可寻址空间不同;显示器、硬盘容量和输入法不由 32 位或 64 位这一分类直接决定。
##### 第8题
**答案:** A
**解析:** 按边数分类:$3$ 条边时有路径和星形两种,$4$ 条边时有四边形和三角形带一条悬挂边两种,$5$ 条边和 $6$ 条边时各一种,共 $2+2+1+1=6$ 种。
##### 第9题
**答案:** C
**解析:** 最少比较次数出现在输入数组已经有序时:第一趟比较 $n-1$ 对相邻元素,没有交换,随后外层循环结束。
##### 第10题
**答案:** B
**解析:** 先计算 `b+c`,其后缀表达式为 `bc+`;再与 `a` 相乘,最后与 `d` 相乘,得到 `abc+*d*`。
##### 第11题
**答案:** C
**解析:** 从根开始依次沿右孩子到达图中最右下结点,其下标依次为 $1,3,7,15$,所以数组最大下标至少为 $15$。
##### 第12题
**答案:** A
**解析:** $13=8+4+1=(1101)_2$,$0.375=1/4+1/8=(0.011)_2$,合并得到 $(1101.011)_2$。
##### 第13题
**答案:** C
**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。
##### 第14题
**答案:** B
**解析:** `x & (x-1)` 每次恰好清除二进制表示中最右侧的一个 `1`。循环次数因此等于 `1` 的个数,所填语句为 `x &= x - 1`。
##### 第15题
**答案:** A
**解析:** CPU 负责执行运算和控制程序运行。易失性存储器断电后可能丢失数据,屏幕尺寸与分辨率不具有一一对应关系,接入互联网也不限于 Wi-Fi。
#### **二、阅读程序**
##### 程序(1)
**程序分析:** 对每个位置 `i`,程序输出从该位置向右、连续元素均不大于 `a[i]` 的最远端点 `ans`。若当前值比前一个值小,则重新从 `i` 开始寻找。
**答案速查**
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | × | √ | √ | √ | D | A |
###### 第16题
**答案:** ×(错误)
**解析:** `ans` 至少等于 `i`,但可能恰好等于 `i`;例如严格递增序列中每次输出就是当前位置,因此不保证严格大于。
###### 第17题
**答案:** √(正确)
**解析:** 只有在 `ans<n` 时才执行递增操作,故 `ans` 不会超过 $n$。
###### 第18题
**答案:** √(正确)
**解析:** 下降时两种条件都会重置;上升时重置为 `i` 也不会丢失合法的更远端点;相等时两种条件都不重置,因此结果不变。
###### 第19题
**答案:** √(正确)
**解析:** `ans` 是连续满足约束的最远端点。既然已越过 `i+1`,该位置的值必然不大于 `a[i]`。
###### 第20题
**答案:** D
**解析:** 严格递增时,每轮只需常数次判断,`ans` 随位置推进,整体时间复杂度为 $O(n)$。
###### 第21题
**答案:** A
**解析:** 严格递减时,每个位置都会重置并向右扫描至末尾,总次数为 $n+(n-1)+\cdots+1$,最坏复杂度为 $O(n^2)$。
##### 程序(2)
**程序分析:** 程序将 Base64 字符映射为 6 位整数,再将每四个编码字符组合为至多三个原始字节。`ans` 是全局字符数组,输出时按以零结尾的 C 字符串处理。题目规定 `char` 为有符号的 8 位类型。
**答案速查**
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | × | √ | √ | B | B | C |
###### 第22题
**答案:** ×(错误)
**解析:** 限定的字符集合是 Base64 编码的输入字符集;解码结果可以包含空格等其他字符,因此该断言错误。
###### 第23题
**答案:** √(正确)
**解析:** 例如 `YQ==` 解码为 `a`,`YQA=` 解码为 `a` 后跟零字节。用 `%s` 输出时都会在零字节处结束,第二行同为 `a`。
###### 第24题
**答案:** √(正确)
**解析:** `table[0]` 被初始化为全一位模式 `0xff`,在题目规定的有符号 8 位 `char` 中表示 $-1$,转为 `int` 后仍为 $-1$。
###### 第25题
**答案:** B
**解析:** 循环每次处理 $4$ 个输入字符,每轮只进行常数次运算,总时间复杂度为 $O(n)$。
###### 第26题
**答案:** B
**解析:** 将 `Y3Nx` 按 Base64 解码,依次得到字符 `c、s、q`,所以输出 `csq`。
###### 第27题
**答案:** C
**解析:** 该字符串解码为 `ccf 2021`,其中 `ccf` 与年份之间有一个空格,不能省略。
##### 程序(3)
**程序分析:** 程序先用 Floyd 算法求最短路,再枚举一对顶点,将其间距离设为零并更新最短路,最后取所有无序顶点对距离之和的最小值。
**答案速查**
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | × | × | √ | √ | A | A |
###### 第28题
**答案:** ×(错误)
**解析:** Floyd 算法需要把中转顶点 `k` 放在最外层,保证阶段性状态含义;改为 `i,j,k` 后不再具有这一保证,结果可能改变。
###### 第29题
**答案:** ×(错误)
**解析:** 读入边需要 $O(m)$ 时间,后续枚举和更新需要 $O(n^4)$ 时间,整体可写为 $O(m+n^4)$,不能说所有运行步骤都与 $m$ 无关。
###### 第30题
**答案:** √(正确)
**解析:** 在允许的图规模和边权下,最优距离总和也可能大于 $10^7$。若把 `ans` 初始化为该值,取最小值时就可能保留错误的初值。
###### 第31题
**答案:** √(正确)
**解析:** 两次更新分别允许经由顶点 `i` 和 `j`,最终允许的中转顶点集合相同,因此交换这两次更新的顺序不影响结果。
###### 第32题
**答案:** A
**解析:** 对给定图枚举置零的顶点对并计算更新后的无序点对最短路之和,最小结果为 $14$。
###### 第33题
**答案:** A
**解析:** 代码使用“枚举中转点并松弛任意两点距离”的 Floyd 算法。
#### **三、完善程序**
##### 程序(1)
**程序分析:** 程序用两次计数排序完成二关键字排序:先按次关键字 `b` 排序,再稳定地按主关键字 `a` 排序。`ord`、`res` 保存原数据下标,最终按 `a` 优先、`b` 次之输出。
**答案速查**
| 题号 | 34 | 35 | 36 | 37 | 38 |
| :---: | :---: | :---: | :---: | :---: | :---: |
| 答案 | B | D | C | A | B |
###### 第34题
**答案:** B(`++cnt[b[i]]`)
**解析:** 第一趟按 `b` 排序,因此应统计每个 `b[i]` 的出现次数,执行 `++cnt[b[i]]`。
###### 第35题
**答案:** D(`ord[--cnt[b[i]]] = i`)
**解析:** 前缀计数确定排序位置,需在 `ord[--cnt[b[i]]]` 中记录原数据下标 `i`。
###### 第36题
**答案:** C(`++cnt[a[i]]`)
**解析:** 第二趟以 `a` 为主关键字,因此统计 `a[i]` 的出现次数。
###### 第37题
**答案:** A(`res[--cnt[a[ord[i]]]] = ord[i]`)
**解析:** 沿第一趟结果逆序扫描,并按 `a[ord[i]]` 放入最终位置,以保持相同 `a` 时原有的 `b` 顺序。
###### 第38题
**答案:** B(`a[res[i]], b[res[i]]`)
**解析:** 最终排列保存在 `res` 中,应输出原数组中下标为 `res[i]` 的二元组。
##### 程序(2)
**程序分析:** 程序排序后,用资金最多的候选同学与价格最低的自行车配对,累计各人的不足金额,判断公共预算能否补足;再二分求最多可租车的人数。函数参数 `nn` 为本次待检验人数。
**答案速查**
| 题号 | 答案 |
| :---: | :--- |
| 39 | `n-nn+1` |
| 40 | `M[i] < C[j]` |
| 41 | `count <= A` |
| 42 | `check(mid)` |
| 43 | `mid-1` |
###### 第39题
**答案:** `n-nn+1`
**解析:** 应选取排序后资金最多的 `nn` 人,其第一人的下标是 `n-nn+1`。
###### 第40题
**答案:** `M[i] < C[j]`
**解析:** 只有自行车价格高于该同学已有资金时才需公共预算补足,即判断 `M[i]<C[j]`。
###### 第41题
**答案:** `count <= A`
**解析:** 累计不足金额 `count` 不超过学校预算 `A` 时,本次人数可行,因此返回 `count<=A`。
###### 第42题
**答案:** `check(mid)`
**解析:** 将二分得到的候选人数 `mid` 交给判定函数,调用 `check(mid)`。
###### 第43题
**答案:** `mid-1`
**解析:** 候选人数不可行时,应把右边界缩小到 `mid-1`,排除当前值及更大值。