- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析 - 补充SVG图示,统一试题排版并导出打印PDF - 重整初赛专题训练与复习资料目录,清理旧版源文件
9.9 KiB
一、单项选择题
答案速查
| 题号 | 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]。