整理 NOI 初赛资料目录并标准化 CSP-J 模拟卷
- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析 - 补充SVG图示,统一试题排版并导出打印PDF - 重整初赛专题训练与复习资料目录,清理旧版源文件
This commit is contained in:
1 parent
fe5c7ffd58
commit
0af92a68d9
216 files changed
+12743
-1272
No files matched your search
@@ -0,0 +1,331 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 06 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | D | D | C | A | A | B | C |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | A | B | D | D | C | C |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** NOI 是全国青少年信息学奥林匹克竞赛的英文简称。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 按题目采用的 $1024$ 进位约定,$1\ \mathrm{TB}=1024^4\ \mathrm{B}=2^{40}\ \mathrm{B}$。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 将两个二进制数对齐后逐位进行与运算,只有两位均为 $1$ 时结果才为 $1$,得到 `01 0010 1000 0011`。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 根深度为 $1$ 时,深度为 $h$ 的二叉树至多有 $2^{h-1}$ 个叶结点。$2^{10}=1024<2011\le2048=2^{11}$,所以最小深度为 $12$。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 单峰数组可用二分法寻找峰顶:先检查中间位置是否同时大于两侧元素;若不是,则沿数值上升的方向缩小搜索区间。按该控制流程,三段代码的执行顺序为 `c、a、b`。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 先给每个班分配一个名额,再将剩余 $3$ 个相同名额分给 $7$ 个不同班级。由隔板法,方案数为 $\binom{3+7-1}{7-1}=\binom96=84$。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 生成树包含原图全部 $6$ 个顶点,而任意 $n$ 个顶点的树均有 $n-1$ 条边,因此边数为 $5$。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 对非负的 `x`,先乘 $100$,加 $0.5$ 后转为整数以完成四舍五入,再除以 `100.0` 恢复数量级,对应选项 C。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 两个数分别为十进制 $36$ 和 $20$,相加为 $56$,对应的 8 位二进制表示是 `00111000`。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 字符串是由字符组成的特殊线性表,可以用数组存储;长度可以为零。含空格字符的串仍含有元素,不是空串。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 队列在队尾插入、队头删除,遵循先进先出原则。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 代入给定布尔值后,A、B、C 均为假;D 中 $x\land y$ 为真,因此整个逻辑或表达式为真。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 打印机将计算机处理结果输出为纸质内容,属于输出设备。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** “复制”将所选文件的信息放入剪贴板,以供后续粘贴操作使用,同时保留原位置的文件。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 三人的选择相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 递归满足 $\operatorname{luo}(n,m)=\sum_{0\le i<m,\ i\text{ 为偶数}}\operatorname{luo}(n-1,i)$,边界为 `n<=1` 或 `m<2`。`gu` 以 $-1$ 表示未计算,实现记忆化搜索。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | √ | √ | B | A |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 初次输入的 `m` 可以是奇数;递归产生的后续参数才由偶数循环变量 `i` 给出。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 当 `m` 为偶数时,改为 `<=` 会多计算 `i=m` 这一项。例如 `luo(2,2)` 会由 $1$ 变为 $2$。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 删除的是记忆化的读取和写入,递归式与边界不变,因此结果相同,但运行时间可能显著增加。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 在题目的补码整数模型中,将每个字节置为 `255` 会使每个 `int` 的所有位均为 $1$,其值为 $-1$,与逐项赋值效果一致。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 输入为 `4 8`。由递推式可得 `luo(4,8)=luo(3,0)+luo(3,2)+luo(3,4)+luo(3,6)=1+1+2+4=8`。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 记忆化后至多有 $O(nm)$ 个状态,每个状态枚举 $O(m)$ 个转移,时间复杂度为 $O(nm^2)$。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序模拟长除法,`b` 保存商的各位,`a` 保存待除数(余数乘十)。若待除数重复,就找到了循环节;若余数变为零,则小数终止。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | √ | × | C | D |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 当 `n==m` 且 `m!=0` 时,整数部分为 $1$、余数为零,可以正常结束,不要求两个输入不同。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 程序包含整数除法和取模,除数 `m` 必须非零。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 循环可因检测到重复待除数而执行 `break`,也可因余数为零而使 `do...while` 条件不成立,共有两种退出途径。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如输入 `1 3` 时,会出现待除数 $10$,已经大于初始的 $n=1$,因此该限制不成立。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $11/8=1.375$,是有限小数,不需循环节括号,因此输出 `1.375`。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 输入为 `5 13`,$5/13=0.\overline{384615}$,输出为 `0.(384615)`,对应 D。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** 每次合并相邻两项,第一分量和第二分量分别相加,代价为两项第一分量之和加上第二分量之差的绝对值。DFS 枚举所有合并顺序并恢复现场,`ans` 保存最大总代价;也可用区间动态规划核对结果。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | × | B | C | C |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** $n=0$ 时不满足递归终止条件,但合并循环也不会执行,函数直接返回,最终输出 $0$,不会因该输入而死循环。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 所有输入为零时,每次合并代价均为零,所以任何合并顺序的总代价均为零。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 取 $n=1$,不发生任何合并,输出为 $0$;若唯一输入项大于零,输出就小于该输入值。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 第一分量全为 $9$、第二分量全为零时,最优顺序依次合并为含 $2,3,\ldots,20$ 项的区间,总代价为 $9(2+3+\cdots+20)=1881$。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 合并后的第二分量为已有项数的 $5$ 倍。最优链式合并的各次差值为 $5\times0,5\times1,\ldots,5\times28$,总代价为 $2030$。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 对每个连续区间枚举最后一次合并位置,按合并公式取最大值;对两行均为 $15,14,\ldots,1$ 的数据计算,最大总代价为 $2240$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序扫描原字符串,把所有非数字字符依次复制到前面,用 `j` 记录保留字符数,最后只输出这 `j` 个字符,从而删除全部数字。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 34 | `\|\|` |
|
||||
| 35 | `j++` |
|
||||
| 36 | `j` |
|
||||
| 37 | `s[i]` |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `||`
|
||||
|
||||
**解析:** 不属于数字的条件是小于字符 `0` 或大于字符 `9`,应使用逻辑或运算符 `||`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `j++`
|
||||
|
||||
**解析:** 写入一个保留字符后,下一个写入位置需向后移动,执行 `j++`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `j`
|
||||
|
||||
**解析:** `j` 就是删除数字后保留下来的字符数,应作为函数返回值。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `s[i]`
|
||||
|
||||
**解析:** 保留字符已经依次存入 `s[0..len-1]`,输出时逐个访问 `s[i]`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 将排列值映射到其原位置,按原位置建立双向链表,再按数值从小到大删除相应结点。删除某位置时,尚在其右边的最近结点就是该位置右侧第一个更大的元素。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 38 | `a[x] = i` |
|
||||
| 39 | `i+1` |
|
||||
| 40 | `R[a[i]]` |
|
||||
| 41 | `a[i]` |
|
||||
| 42 | `R[i]` |
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `a[x] = i`
|
||||
|
||||
**解析:** 读到位置 `i` 的值为 `x`,应记录值 `x` 所在的位置,即 `a[x]=i`。
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** `i+1`
|
||||
|
||||
**解析:** 初始按位置顺序相连,位置 `i` 的右邻为 `i+1`,最后一个结点的右邻为哨兵 `n+1`。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** `R[a[i]]`
|
||||
|
||||
**解析:** 删除 `a[i]` 时,其右邻的左指针应越过该结点,故左侧下标为 `R[a[i]]`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** `a[i]`
|
||||
|
||||
**解析:** 其左邻的右指针也应越过当前结点,接到 `R[a[i]]`,所填下标为 `a[i]`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** `R[i]`
|
||||
|
||||
**解析:** `R[i]` 已保留位置 `i` 右边第一个更大元素的位置;不存在时为哨兵 `n+1`。
|
||||
Reference in new issue
Block a user