整理 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,334 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 05 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | A | D | A | B | C | D | C |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | A | B | C | D | C | C |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 全国青少年计算机程序设计竞赛(NOI)由中国计算机学会于 1984 年创办。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 一个字节为 $8$ 位,因此 $32$ 位整型变量占 $32/8=4$ 个字节。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 前三项均等于十进制 $617$:$(269)_{16}=617$,$(1151)_8=617$。而 $(1001101011)_2=512+64+32+8+2+1=619$,因此 D 不同。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 各层结点数依次为 $1,k,k^2,\ldots,k^h$,相加得到等比数列和 $1+k+\cdots+k^h=(k^{h+1}-1)/(k-1)$。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** `s` 初始为 `a`,循环共执行 `c` 次,每次加 $1$,所以结束后 `s=a+c`。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 共有 $2048\times1024$ 个像素,每个像素占 $32/8=4$ 字节。总空间为 $2048\times1024\times4=8\times1024^2$ 字节,即 $8\ \mathrm{MB}$。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 由握手定理,所有顶点的度数之和为边数的两倍。设顶点数为 $n$,则 $2n=2\times16$,得到 $n=16$。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** `1` 和 `n` 都是整数,因此 `1/n` 执行整数除法;当 `n>1` 时结果为 $0$。应将分子写为 `1.0` 等浮点数,才能得到所需的小数值。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 先从 $5$ 种颜色中选出形成完整手套的 $2$ 种,再从剩余 $3$ 种中选出 $2$ 种,各取一只。单只手套分别有左右手两种选择,因此共有 $\binom52\binom32\times2^2=120$ 种。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 根的高度为 $1$ 时,高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。由于 $32\le61\le63$,所以高度为 $6$。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** IPv4 地址的每一段为 $8$ 位,取值范围是 $0$ 至 $255$。选项 C 中出现了 `256`,超出了该范围。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 寄存器位于 CPU 内部,用于暂存操作数、地址及中间结果,是 CPU 的重要组成部分。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** POP3、SMTP、IMAP 均用于电子邮件的发送或接收;WTO 是世界贸易组织的英文缩写,不是电子邮件协议。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 采用流水作业:第一道菜在 $30$ 分钟完成,后两道菜各间隔 $10$ 分钟完成。总用时为 $30+10+10=50$ 分钟。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** `encoder` 先放入 `C、S、P`,再按字母序补齐其余字母;`decoder` 是其逆映射。程序把输入字母按这张逆映射表逐个替换。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | × | √ | × | A | D |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 下标为 `st[i]-'A'`,只有大写字母才能保证下标位于 $0$ 至 $25$ 之间。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 并非每个字母都会变化,例如字母 `Z` 的映射仍为 `Z`,输入 `Z` 就与输出相同。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 需要检查是否预先出现的特殊字母 `C、S、P` 都在前三个位置;后续补入的字母小于当前枚举字母,不会造成遗漏,因此修改该检查上界不影响结果。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 只建立前 $16$ 个位置的逆映射会漏掉后续字母,部分输入无法被正确还原,输出可能改变。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 要输出 `A、B、C`,输入应分别是 `encoder[0..2]`,即 `C、S、P`,因此输入既有 `S` 又有 `P`。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 输出 `C、S、P` 分别对应输入 `P、R、N`,所以输入既没有 `S`,也没有 `A`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 对每个位置 `i`,程序输出从该位置向右、连续元素均不大于 `a[i]` 的最远端点 `ans`。若当前值比前一个值小,则重新从 `i` 开始寻找。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | √ | √ | D | A |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** `ans` 至少等于 `i`,但可能恰好等于 `i`;例如严格递增序列中每次输出就是当前位置,因此不保证严格大于。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 只有在 `ans<n` 时才执行递增操作,故 `ans` 不会超过 $n$。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 下降时两种条件都会重置;上升时重置为 `i` 也不会丢失合法的更远端点;相等时两种条件都不重置,因此结果不变。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `ans` 是连续满足约束的最远端点。既然已越过 `i+1`,该位置的值必然不大于 `a[i]`。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 严格递增时,每轮只需常数次判断,`ans` 随位置推进,整体时间复杂度为 $O(n)$。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 严格递减时,每个位置都会重置并向右扫描至末尾,总次数为 $n+(n-1)+\cdots+1$,最坏复杂度为 $O(n^2)$。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** DFS 从每个顶点出发枚举不重复顶点的路径,回溯时撤销访问标记,`ans` 记录路径权值之和的最大值,即最长简单路径长度。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | √ | D | B | B | C |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 简单无向完全图的所有非对角邻接项都会被输入边覆盖;对角项不会被用于访问已标记的当前顶点,因此可省略这段初始化。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 所有起点仍会被完整枚举,改变枚举先后不影响最终取到的最大值。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 图中两个连通分量各只有一条权值为 $1$ 的边,最长简单路径长度为 $1$。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 四个顶点的完全图中,每条边权值为 $1$,简单路径至多经过 $3$ 条边,且可以达到,因此输出 $3$。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 顶点 $4$ 孤立,三角形中最长简单路径可取 $2\to3\to1$,长度为 $20+30=50$。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 取路径 $3\to1\to4\to2$,长度为 $50+40+60=150$;枚举其他简单路径也不能得到更大值。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序先按区间左端点升序排序,再删除被前面区间包含的区间,随后反复选取左端点不超过当前覆盖终点、且能把覆盖范围向右扩展最远的区间,求覆盖目标区间所需的最少区间数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 34 | 35 | 36 | 37 | 38 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | D | A | A | B |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** B(`A[j].a<A[j-1].a`)
|
||||
|
||||
**解析:** 冒泡排序时,若后一个区间的左端点更小,就应与前一个交换,即判断 `A[j].a<A[j-1].a`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** D(`A[j]=A[j-1];A[j-1]=t;`)
|
||||
|
||||
**解析:** `t` 已保存 `A[j]`,交换应先执行 `A[j]=A[j-1]`,再执行 `A[j-1]=t`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** A(`A[i].b>A[p-1].b`)
|
||||
|
||||
**解析:** 已保留区间的右端点严格递增;只有当前右端点大于最后保留区间的右端点时,才有保留价值。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** A(`q+1<n&&A[q+1].a<=r`)
|
||||
|
||||
**解析:** 继续检查下一个区间是否存在,且其左端点不超过当前终点 `r`,才能将 `q` 移到最后一个可衔接的区间。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** B(`r=max(r,A[q].b)`)
|
||||
|
||||
**解析:** `q` 指向当前可用区间中右端点最远者,应使用 `A[q].b` 更新覆盖终点 `r`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序先求每一行的前缀和,枚举子矩阵左右列边界,再把各行在该列区间内的和视为一维数组,用最大连续子段和方法求最大子矩阵和。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 39 | `[1][1]` |
|
||||
| 40 | `rowsum[i][0] = 0` |
|
||||
| 41 | `rowsum[i][j-1] + matrix[i][j]` |
|
||||
| 42 | `area = 0` |
|
||||
| 43 | `rowsum[i][last] - rowsum[i][first-1]` |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** `[1][1]`
|
||||
|
||||
**解析:** 答案要求非空子矩阵,初始化为实际元素 `matrix[1][1]`,才能正确处理所有元素均为负数的情况。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** `rowsum[i][0] = 0`
|
||||
|
||||
**解析:** 每行零个元素的前缀和为零,因此令 `rowsum[i][0]=0`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** `rowsum[i][j-1] + matrix[i][j]`
|
||||
|
||||
**解析:** 第 `i` 行前 `j` 个数的和等于前 `j-1` 个数之和加当前元素,即 `rowsum[i][j-1]+matrix[i][j]`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** `area = 0`
|
||||
|
||||
**解析:** 每次更换列区间后,重新从第一行扫描,当前累加和 `area` 应重置为零。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** `rowsum[i][last] - rowsum[i][first-1]`
|
||||
|
||||
**解析:** 第 `i` 行在闭区间 `[first,last]` 中的和为 `rowsum[i][last]-rowsum[i][first-1]`。
|
||||
Reference in new issue
Block a user