整理 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,372 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 12 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | B | B | C | D | D | B | A |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | D | C | C | A | A |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 操作系统负责管理 CPU、内存、外部设备等硬件资源,并为程序运行和用户操作提供统一的管理与服务。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** NOI 是全国青少年信息学奥林匹克竞赛的英文简称。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 队列在队尾插入、队头删除,遵循先进先出原则。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $b$ 位二进制最多表示 $2^b$ 种状态。因为 $2^8=256$,所以至少需要 $8$ 位。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** A、B、C 均含有与假值 $z$ 的逻辑与,因此为假。D 中 $x\land y$ 为真,逻辑或的结果为真。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** $(269)_{16}=(617)_{10}=(1151)_8=617$,而 $(1001101011)_2=619$,所以 D 与其余三项不同。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 按“操作数在前、运算符在后”的规则,`b+c` 写作 `bc+`,再依次与 `a`、`d` 相乘,得到 `abc+*d*`。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 若四种花色各至多取 $3$ 张,则总数至多为 $12$ 张。现取 $13$ 张,根据抽屉原理,至少有一种花色取到 $4$ 张。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 前序顺序为“根、左、右”,中序顺序为“左、根、右”。要使两者相同,每个结点都不能有左子树;因此只含根结点或仅沿右孩子延伸的二叉树符合条件。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 按根下标为 $1$、右孩子下标为 $2i+1$ 的规则,图中最右下结点的下标为 $1\to3\to7\to15$,所以最大下标为 $15$。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 只含一种字母的不同非空子串有 $3\times3=9$ 个;跨越 `A/B` 或 `B/C` 边界的各有 $3\times3=9$ 个;同时含 `A、B、C` 的有 $3\times3=9$ 个。共 $9+9+9+9=36$ 个。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 先合并权值 $300$ 和 $400$,得到新结点 $700$。按同权时优先选择合并结点的规则,再合并 $600$ 和这个新结点,最后与原权值 $700$ 合并。“也”所在叶结点的深度为 $3$,编码长度为 $3$。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 将连通图保留为一棵生成树后,边数由 $m$ 变为 $n-1$,需删除 $m-n+1$ 条边。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 删除 `p` 时,应把前驱的后继指向 `p` 的后继,把后继的前驱指向 `p` 的前驱。A 却让这两个相邻结点的相应指针分别指向自身,不能正确连接链表。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** `num[i]` 表示以第 `i` 个元素结尾的最长严格递增子序列长度。程序尝试由前面更小的元素转移,最后取所有 `num[i]` 的最大值。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 15 | 16 | 17 | 18 | 19 | 20 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | × | √ | D | B |
|
||||
|
||||
###### 第15题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 算法只比较元素大小,负数同样可以参与比较,不会仅因输入为负数而出错。
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 长度为 $n$ 的序列,其子序列最多包含 $n$ 个元素,因此 `ans<=n`。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如序列 `1,2` 中,初始两项的 `num` 都为 $1$;必须允许相等时更新,才能把第二项改为 $2$。改成严格大于后会漏掉这次转移。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 当 `num[i]==ans` 时,无论是否再次赋值,`ans` 的数值都不变,因此修改不影响最大值。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 所有数相等时,不存在严格递增的相邻选取关系,最长严格递增子序列只能取一个元素,输出 $1$。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 样例的动态规划长度依次为 $1,1,2,3,4,3,2,4,5,3$,最大值为 $5$;例如可取 `2,5,7,10,15`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 利用恒等式 $u+v-(u\mathbin{\&}v)=u\mathbin{|}v$,程序在所有数值不相同的元素对中寻找最大的按位或值;若不存在这样的元素对,保留初值 $-1$。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 21 | 22 | 23 | 24 | 25 | 26 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | √ | √ | C | C |
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 数组合法下标为 $0$ 至 $999$,因此输入 $n=1000$ 时仍不会越界;不是必须严格小于 $1000$。
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 若所有输入值都相同,条件始终不成立,`ans` 保持为 $-1$,所以输出不一定非负。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 例如序列 `2,1`,原循环会处理“较小值在后、较大值在前”的有序对;限制 `j=i+1` 会漏掉该比较,输出可能改变。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 按位或具有交换性。把严格小于改为不等于只会同时处理反向的一对,不会改变最大值。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 若出现 $128$,只要与某个不同值配对,其按位或的结果就至少为 $128$;若全部为 $128$ 则输出为 $-1$。两种情况都不可能得到 $127$。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 按位或结果为偶数,说明参与得到该结果的两个数最低位均为零,因此输入中至少有两个偶数。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** `a[x]=y` 与 `b[y]=x` 维护两侧结点的一一配对,冲突配对会先解除。最后分别统计两数组中的零元素;若当前有 $t$ 对配对,输出为 $2n-2t$。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 27 | 28 | 29 | 30 | 31 | 32 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | × | × | × | A | A |
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 第一对正编号结点必定可以配对,之后的更新不会使配对总数降为零,因此 $m>0$ 时最终至少有一对,输出小于 $2n$。
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 最终答案为偶数,但某一次执行 `++ans` 后的中间值可以是奇数。例如仅配对 `(1,2)` 时,扫描 `i=1` 就可能使 `ans` 变为 $1$。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如输入配对 `(1,2)`、`(3,1)` 后,`a[1]=2`、`b[1]=3`,二者可以同时大于零。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如先后输入 `(1,2)`、`(1,3)`,每次均有 `x<y`,但第二次仍须解除旧配对,因此相应语句会执行。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 两侧编号分别互不相同时,所有 $m$ 对都能保留,零元素总数为 $2(n-m)=2n-2m$。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 所有 `y` 相同时,最终只能保留其中一对配对,故零元素总数为 $2n-2$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序从小到大试除,反复输出同一个质因子并缩小剩余的 `n`。当试除数超过剩余数的平方根时,若还有大于 $1$ 的剩余数,它本身就是最后一个质因子。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 33 | 34 | 35 | 36 | 37 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | C | C | A | C |
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** C(`2`)
|
||||
|
||||
**解析:** 最小质因子从 $2$ 开始,因此初始化 `i=2`。
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** C(`i*i`)
|
||||
|
||||
**解析:** 只需试除至平方根,循环条件为 `i*i<=n`,所以所填表达式为 `i*i`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** C(`while(n%i==0)`)
|
||||
|
||||
**解析:** 同一个质因子可能出现多次,必须使用 `while(n%i==0)` 反复输出并除去。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** A(`n>1`)
|
||||
|
||||
**解析:** 若试除后 `n>1`,说明仍剩一个质因子,需要单独输出。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** C(`n`)
|
||||
|
||||
**解析:** 最后剩下的质因子就是当前的 `n`,应输出 `n`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序成对枚举 $n$ 的正约数,避免平方根重复加入;随后对每两个不同约数求最大公约数并累加,对 $10007$ 取模。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 38 | `i*i` |
|
||||
| 39 | `n/i` |
|
||||
| 40 | `return a` |
|
||||
| 41 | `a%b` |
|
||||
| 42 | `ans + gcd(a[i], a[j])` |
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `i*i`
|
||||
|
||||
**解析:** 枚举到 $\sqrt n$ 即可找到所有约数对,条件写为 `i*i<=n`。
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** `n/i`
|
||||
|
||||
**解析:** 一对约数为 `i` 与 `n/i`。只有 `n/i!=i` 时才需再加入另一个,避免完全平方数的平方根重复。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** `return a`
|
||||
|
||||
**解析:** 欧几里得算法中,当第二个参数为零时,第一个参数就是最大公约数,应执行 `return a`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** `a%b`
|
||||
|
||||
**解析:** 递推式为 `gcd(a,b)=gcd(b,a%b)`,第二个参数应为 `a%b`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** `ans + gcd(a[i], a[j])`
|
||||
|
||||
**解析:** 当前约数对的贡献为 `gcd(a[i],a[j])`,应在原 `ans` 上累加后再取模。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** 程序对可切出的整数长度进行二分。长度为 `mid` 时,第 `i` 根绳子可切出 `len[i]/mid` 段;总段数随候选长度增大而不增加,满足二分判定的单调性。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 43 | `count = count + len[i]` |
|
||||
| 44 | `count < m` |
|
||||
| 45 | `lbound < ubound` |
|
||||
| 46 | `(lbound + ubound + 1) / 2` |
|
||||
| 47 | `count = count + len[i] / mid` |
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** `count = count + len[i]`
|
||||
|
||||
**解析:** 先累加绳子总长度,等价于计算每段长度为 $1$ 时最多能切出的段数。
|
||||
|
||||
###### 第44题
|
||||
|
||||
**答案:** `count < m`
|
||||
|
||||
**解析:** 若总长度仍小于所需段数 `m`,则即使每段仅长 $1$ 也无法满足要求,应判定失败。
|
||||
|
||||
###### 第45题
|
||||
|
||||
**答案:** `lbound < ubound`
|
||||
|
||||
**解析:** 候选上下界尚未重合时继续二分,故条件为 `lbound<ubound`。
|
||||
|
||||
###### 第46题
|
||||
|
||||
**答案:** `(lbound + ubound + 1) / 2`
|
||||
|
||||
**解析:** 可行时更新为 `lbound=mid`,需使用向上取整的中点 `(lbound+ubound+1)/2`,避免只差 $1$ 时陷入死循环。
|
||||
|
||||
###### 第47题
|
||||
|
||||
**答案:** `count = count + len[i] / mid`
|
||||
|
||||
**解析:** 当前绳子能提供 `len[i]/mid` 段,应把它累加到总段数 `count` 中。
|
||||
Reference in new issue
Block a user