- 将18套模拟卷分离为试题和答案解析,补齐并规范逐题解析 - 补充SVG图示,统一试题排版并导出打印PDF - 重整初赛专题训练与复习资料目录,清理旧版源文件
10 KiB
一、单项选择题
答案速查
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 答案 | A | B | A | D | D | C | C | B |
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|
| 答案 | C | D | C | A | C | A | C |
逐题解析
第1题
答案: A
解析: 将 A 化简为 $P\lor[\neg P\land(Q\lor\neg Q)]=P\lor\neg P=\mathrm{true}$,所以它是恒真式。
第2题
答案: B
解析: 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。
第3题
答案: A
解析: $(11.01)_2=1\times2^1+1\times2^0+0\times2^{-1}+1\times2^{-2}=3.25$。
第4题
答案: D
解析: 降低浮点数精度时,舍入可能使数值变大、变小或保持不变,但不会把正数变为负数,或把负数变为正数。
第5题
答案: D
解析: “存储程序”是冯·诺依曼体系结构的核心思想,即将程序指令与数据存放在存储器中,由计算机依次取指执行。
第6题
答案: C
解析: 每次切换大小写后输出 A、S、D 或 a、s、d,每 6 个字符循环一次。$81\bmod6=3$,因此第 81 个字符是大写 D。
第7题
答案: C
解析: 只含一种字母的不同非空子串有 3\times3=9 个;跨越 A/B 或 B/C 边界的各有 3\times3=9 个;同时含 A、B、C 的有 3\times3=9 个。共 9+9+9+9=36 个。
第8题
答案: B
解析: 广度优先搜索按距起点的层次逐层扩展,先发现的结点先被扩展,因此通常使用先进先出的队列。
第9题
答案: C
解析: 在搜索引擎中给关键词加双引号,通常表示按完整词组进行精确匹配。
第10题
答案: D
解析: 选项 D 对四个关键字依次得到 $\lfloor\sqrt2\rfloor=1$、$\lfloor\sqrt6\rfloor=2$、$\lfloor\sqrt{10}\rfloor=3$、$\lfloor\sqrt{17}\rfloor=4$,不发生地址冲突。
第11题
答案: C
解析: 按递归条件展开:solve(7)=7*solve(5),solve(5)=5*solve(3),solve(3)=3*solve(2),solve(2)=2*solve(1)。因此结果为 $7\times5\times3\times2=210$。
第12题
答案: A
解析: 先把元素两两比较,每对的较大者参与最大值比较,较小者参与最小值比较。偶数个元素需 3N/2-2 次,奇数个元素需 3(N-1)/2 次,统一表示为 $\lceil3N/2\rceil-2$。
第13题
答案: C
解析: 先求四人生日月份互不相同的概率,再取补集:$1-\dfrac{12\times11\times10\times9}{12^4}=\dfrac{41}{96}$。
第14题
答案: A
解析: 前序遍历的首结点 A 是根。若左子树根为 B,其结点应在后序遍历中形成以 B 结尾的连续段 CB,因此左子树可以有 B、C 两个结点。
第15题
答案: C
解析: 从 1999 年 10 月 1 日到 2017 年 10 月 1 日相隔 18\times365+5=6575 天,其中包含 2000、2004、2008、2012、2016 年的闰日。$6575\bmod7=2$,由星期日向前推 2 天为星期五。
二、阅读程序
程序(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)
程序分析: 程序先用 Floyd 算法求最短路,再枚举一对顶点,将其间距离设为零并更新最短路,最后取所有无序顶点对距离之和的最小值。
答案速查
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|---|---|---|---|---|---|---|
| 答案 | × | × | √ | √ | A | A |
第22题
答案: ×(错误)
解析: Floyd 算法需要把中转顶点 k 放在最外层,保证阶段性状态含义;改为 i,j,k 后不再具有这一保证,结果可能改变。
第23题
答案: ×(错误)
解析: 读入边需要 O(m) 时间,后续枚举和更新需要 O(n^4) 时间,整体可写为 $O(m+n^4)$,不能说所有运行步骤都与 m 无关。
第24题
答案: √(正确)
解析: 在允许的图规模和边权下,最优距离总和也可能大于 $10^7$。若把 ans 初始化为该值,取最小值时就可能保留错误的初值。
第25题
答案: √(正确)
解析: 两次更新分别允许经由顶点 i 和 j,最终允许的中转顶点集合相同,因此交换这两次更新的顺序不影响结果。
第26题
答案: A
解析: 对给定图枚举置零的顶点对并计算更新后的无序点对最短路之和,最小结果为 $14$。
第27题
答案: A
解析: 代码使用“枚举中转点并松弛任意两点距离”的 Floyd 算法。
程序(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)
程序分析: 将每名射手指向目标构成出度为 1 的有向图。程序先处理入度为零的树枝,再处理剩余有向环;w=1 表示计入存活人数,并沿目标方向交替处理状态。
答案速查
| 题号 | 34 | 35 | 36 | 37 | 38 |
|---|---|---|---|---|---|
| 答案 | C | D | D | A | C |
第34题
答案: C(in[a[cur]]--;)
解析: 处理当前结点后,应删除它指向目标的那条边,使目标入度减一,即 in[a[cur]]--。
第35题
答案: D(in[a[cur]]==0 | w==1)
解析: 目标入度降为零时可继续处理;当前结点状态为 w==1 时也需继续处理其目标。因此条件为 in[a[cur]]==0 || w==1;用位或连接两个布尔值时结果也相同。
第36题
答案: D(1-w)
解析: 当前结点与目标结点的状态交替,因此下一层参数为 1-w。
第37题
答案: A(dfs(i,1))
解析: 入度为零的射手可先保留,初始状态取 $1$,故调用 dfs(i,1)。
第38题
答案: C(!vis[i])
解析: 处理完树枝后,尚未访问的结点位于有向环中,应以 !vis[i] 判断是否开始处理该环。
程序(2)
程序分析: 递归函数为每个子树维护允许的开区间 (lower_bound,upper_bound)。当前值必须落在该区间中;左子树上界改为当前值,右子树下界改为当前值,从而验证严格二叉搜索树。
答案速查
| 题号 | 答案 |
|---|---|
| 39 | cur < upper_bound |
| 40 | a[root].right_child |
| 41 | cur |
| 42 | upper_bound |
| 43 | 1 |
第39题
答案: cur < upper_bound
解析: 已检查 cur>lower_bound,还需检查 cur<upper_bound,保证当前值满足上下界限制。
第40题
答案: a[root].right_child
解析: 第二次递归应检查右子树,故根下标为 a[root].right_child。
第41题
答案: cur
解析: 右子树中的所有值应大于当前值,因此下界传入 cur。
第42题
答案: upper_bound
解析: 右子树的上界仍受祖先结点限制,应继续传入 upper_bound。
第43题
答案: 1
解析: 按输入约定,第一个结点是根,因此初次调用的根下标为 $1$。