整理 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,330 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 01 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | A | A | C | B | B | A | C | D |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | B | A | B | B | D | A |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 中国的国家顶级域名为 `.cn`;`.ch` 是瑞士的国家顶级域名。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** C 语言属于过程式程序设计语言;C++、Java 和 C# 均支持面向对象程序设计。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 先将第一个数作为当前最大值,再依次与其余 $N-1$ 个数比较。每次比较至多排除一个候选最大值,因此至少需要 $N-1$ 次比较。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 先计算 `b+c`,其后缀表达式为 `bc+`;再与 `a` 相乘,最后与 `d` 相乘,得到 `abc+*d*`。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** FTP 是文件传输协议,用于在网络中的计算机之间传输文件。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 由辗转相除法,$377=319+58$,$319=5\times58+29$,$58=2\times29$,所以最大公约数为 $29$。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 有 $n$ 个顶点的树恰有 $n-1$ 条边。原图有 $m$ 条边,保留一棵生成树后需删除 $m-(n-1)=m-n+1$ 条边。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 若先序遍历为 `ACB`,则根为 `A`。由中序遍历 `BAC` 可知 `B` 在左子树、`C` 在右子树,先序遍历必须先访问 `B` 再访问 `C`,与 `ACB` 矛盾。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 从 `a` 出发,可能的深度优先遍历包括 `a-b-d-c-e`、`a-c-e-d-b` 和 `a-c-d-b-e`。最后访问的顶点只能是 `b` 或 `e`,共有 $2$ 个。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 从 $A_0$ 进入 $A_1$ 后,$A_1$ 的未访问邻接点 $A_3$ 必须先被访问,不能直接转到与 $A_1$ 不相邻的 $A_2$,因此选项 A 不可能。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 依次选出三对人员,再除去三支队伍的排列顺序,得到 $\dfrac{\binom62\binom42\binom22}{3!}=15$ 种。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 根的高度为 $1$ 时,高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。由于 $32\le61\le63$,所以高度为 $6$。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 代入 $x=\mathrm{true}$、$y=\mathrm{true}$、$z=\mathrm{false}$,A、B、C 均因与 $z$ 进行逻辑与而为假;D 中 $x\land y$ 为真,因此整个逻辑或表达式为真。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 先从 $5$ 种颜色中选出形成完整手套的 $2$ 种,再从剩余 $3$ 种中选出 $2$ 种,各取一只。单只手套分别有左右手两种选择,因此共有 $\binom52\binom32\times2^2=120$ 种。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序枚举字符串长度 $n$ 的所有正因数 $i$,检查下标为 `i-1` 的字符,并对满足 `c>='a'` 的字符进行减去大小写编码差的转换。可能被修改的位置数等于 $n$ 的正因数个数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | × | √ | B | B |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** `scanf("%s",st)` 可以读取不含空白的数字、标点等字符,并不限于大小写字母。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 当 `i=0` 时,第一次计算 `n%i` 就会出现除数为零的问题,因此程序不能正常执行。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 将循环上界缩小到 $\sqrt n$ 后,会漏掉大于 $\sqrt n$ 的因数对应的位置,因此输出可能改变。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 大写字母的编码均小于小写字母 `a`,不满足修改条件,因此字符串保持不变。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $18$ 的正因数为 $1,2,3,6,9,18$,共 $6$ 个;让这些位置都为小写字母即可使 $6$ 个字符发生变化。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $100000=2^5\times5^5$,正因数个数为 $(5+1)(5+1)=36$。其余三个长度的因数个数分别为 $9、1、8$。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 当 $k>1$ 时,数组 `d` 模拟 $k$ 进制计数,`len` 为有效位数,`ans` 记录进位次数。因此 $\mathrm{ans}=\sum_{t\ge1}\lfloor n/k^t\rfloor$。当 $k=1$ 时应直接分析程序,此时每轮恰有一次进位,最终 `ans=n`。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | √ | D | B | D |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 当 $k=1$ 时,第一轮使 `len` 变为 $2$,随后不再增加,因此 `len` 并不总等于 $n$。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 取 $n=1,k=2$,最终 `len=1`,并不小于 $n$,即可构成反例。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `len` 是 $n$ 的 $k$ 进制位数,满足 $k^{\mathrm{len}-1}\le n<k^{\mathrm{len}}$,因此该不等式成立。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** $k=1$ 时每次外层循环使 `ans` 加一,执行 $n$ 次后结果为 $n=10^{15}$。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 进位总数为 $3^{29}+3^{28}+\cdots+1=(3^{30}-1)/2$。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 按公式依次累加 $\lfloor n/10\rfloor、\lfloor n/10^2\rfloor$ 等,得到 $11112222444453$,对应 D。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** 按题目采用的 32 位补码整数模型,`f(x)` 统计二进制表示中 `1` 的个数,`g(x)=x&(-x)` 提取最低位的 `1` 所代表的数值;程序输出二者之和。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | × | √ | × | B |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 数组 `a[1000]` 的合法下标是 $0$ 至 $999$。输入 $n=1001$ 时会访问 `a[1000]`,发生越界。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 零也是反例:`f(0)` 的循环一次也不执行,`g(0)=0`,程序不会因此陷入死循环。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 样例中的最后一个数为 $10$,其二进制为 `1010`,故 `f(10)=2`、`g(10)=2`,最后应输出 $4$,而不是 $5$。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** $511998$ 的二进制表示有 $16$ 个 `1`,最低位的 `1` 代表 $2$,因此输出 $16+2=18$。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 将 `g` 的定义移到 `main` 后面时,需先在调用前提供函数声明;否则编译器在调用处尚不知道 `g`。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 32 位补码下,$-65536$ 的二进制表示有 $16$ 个 `1`,最低位的 `1` 为 $65536$,输出 $65552$;$2147483647=2^{31}-1$,输出 $31+1=32$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(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)
|
||||
|
||||
**程序分析:** 程序用两次计数排序完成二关键字排序:先按次关键字 `b` 排序,再稳定地按主关键字 `a` 排序。`ord`、`res` 保存原数据下标,最终按 `a` 优先、`b` 次之输出。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 39 | 40 | 41 | 42 | 43 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | D | C | A | B |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** B(`++cnt[b[i]]`)
|
||||
|
||||
**解析:** 第一趟按 `b` 排序,因此应统计每个 `b[i]` 的出现次数,执行 `++cnt[b[i]]`。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** D(`ord[--cnt[b[i]]] = i`)
|
||||
|
||||
**解析:** 前缀计数确定排序位置,需在 `ord[--cnt[b[i]]]` 中记录原数据下标 `i`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** C(`++cnt[a[i]]`)
|
||||
|
||||
**解析:** 第二趟以 `a` 为主关键字,因此统计 `a[i]` 的出现次数。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** A(`res[--cnt[a[ord[i]]]] = ord[i]`)
|
||||
|
||||
**解析:** 沿第一趟结果逆序扫描,并按 `a[ord[i]]` 放入最终位置,以保持相同 `a` 时原有的 `b` 顺序。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** B(`a[res[i]], b[res[i]]`)
|
||||
|
||||
**解析:** 最终排列保存在 `res` 中,应输出原数组中下标为 `res[i]` 的二元组。
|
||||
@@ -0,0 +1,330 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 02 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | C | D | A | A | D | C | C |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | A | D | D | D | B | C |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 打印机将计算机中的信息输出到纸张上,属于输出设备;扫描仪、键盘和鼠标属于输入设备。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $b$ 位二进制最多表示 $2^b$ 种状态。因为 $2^8=256$,所以至少需要 $8$ 位。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 若先输出 `c`、`d`,则 `a`、`b` 仍在栈中,且 `b` 位于 `a` 上方。在输出 `a` 之前必须先输出 `b`,因此 `c,d,a,e,b` 不合法。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 高度为 $5$ 时,前 $4$ 层必须填满,最后一层可从左到右放置 $1$ 至 $16$ 个结点。结点数确定后形态唯一,因此有 $16$ 种形态。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** $(11.01)_2=1\times2^1+1\times2^0+0\times2^{-1}+1\times2^{-2}=3.25$。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 8 位无符号整数的范围是 $0$ 至 $2^8-1=255$。选项中能表示的数为 $133$ 和 $199$,其中较大的是 $199$。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $(101.11)_2=2^2+2^0+2^{-1}+2^{-2}=4+1+0.5+0.25=5.75$。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 逆序排列的 $5$ 个数共有 $\binom52=10$ 个逆序对。冒泡排序每次相邻交换恰好减少一个逆序对,因此需要 $10$ 次交换。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 三个数字各不相同时有 $3!=6$ 种。数字 `1` 出现两次时,另一位可选 `2` 或 `3`,共 $2\times3=6$ 种;数字 `2` 出现两次时同样有 $6$ 种。合计 $18$ 种。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 选项 D 对 $2,6,10,17$ 分别得到 $1,2,3,4$,四个地址互不相同;其余三个哈希函数均产生重复地址。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 寄存器位于 CPU 内部,用于暂存操作数、地址及中间结果,是 CPU 的重要组成部分。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 展开递推式可得 $T(n)=T(0)+1+2+\cdots+n=1+n(n+1)/2$,所以时间复杂度为 $O(n^2)$。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 小于 $100$ 的最大素数为 $97$;$98$、$99$ 和 $100$ 均为合数。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 当数组已经按非递减顺序排列时,第一趟需比较相邻元素 $n-1$ 次,但不发生交换,`FLAG` 保持为 $1$,随后循环结束。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序将 Base64 字符映射为 6 位整数,再将每四个编码字符组合为至多三个原始字节。`ans` 是全局字符数组,输出时按以零结尾的 C 字符串处理。题目规定 `char` 为有符号的 8 位类型。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | √ | B | B | C |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 限定的字符集合是 Base64 编码的输入字符集;解码结果可以包含空格等其他字符,因此该断言错误。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 例如 `YQ==` 解码为 `a`,`YQA=` 解码为 `a` 后跟零字节。用 `%s` 输出时都会在零字节处结束,第二行同为 `a`。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `table[0]` 被初始化为全一位模式 `0xff`,在题目规定的有符号 8 位 `char` 中表示 $-1$,转为 `int` 后仍为 $-1$。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 循环每次处理 $4$ 个输入字符,每轮只进行常数次运算,总时间复杂度为 $O(n)$。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 将 `Y3Nx` 按 Base64 解码,依次得到字符 `c、s、q`,所以输出 `csq`。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 该字符串解码为 `ccf 2021`,其中 `ccf` 与年份之间有一个空格,不能省略。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 每次合并相邻两项,第一分量和第二分量分别相加,代价为两项第一分量之和加上第二分量之差的绝对值。DFS 枚举所有合并顺序并恢复现场,`ans` 保存最大总代价;也可用区间动态规划核对结果。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | × | B | C | C |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** $n=0$ 时不满足递归终止条件,但合并循环也不会执行,函数直接返回,最终输出 $0$,不会因该输入而死循环。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 所有输入为零时,每次合并代价均为零,所以任何合并顺序的总代价均为零。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 取 $n=1$,不发生任何合并,输出为 $0$;若唯一输入项大于零,输出就小于该输入值。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 第一分量全为 $9$、第二分量全为零时,最优顺序依次合并为含 $2,3,\ldots,20$ 项的区间,总代价为 $9(2+3+\cdots+20)=1881$。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 合并后的第二分量为已有项数的 $5$ 倍。最优链式合并的各次差值为 $5\times0,5\times1,\ldots,5\times28$,总代价为 $2030$。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 对每个连续区间枚举最后一次合并位置,按合并公式取最大值;对两行均为 $15,14,\ldots,1$ 的数据计算,最大总代价为 $2240$。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** `a[x]=y` 与 `b[y]=x` 维护两侧结点的一一配对,冲突配对会先解除。最后分别统计两数组中的零元素;若当前有 $t$ 对配对,输出为 $2n-2t$。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | × | × | × | A | A |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 第一对正编号结点必定可以配对,之后的更新不会使配对总数降为零,因此 $m>0$ 时最终至少有一对,输出小于 $2n$。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 最终答案为偶数,但某一次执行 `++ans` 后的中间值可以是奇数。例如仅配对 `(1,2)` 时,扫描 `i=1` 就可能使 `ans` 变为 $1$。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如输入配对 `(1,2)`、`(3,1)` 后,`a[1]=2`、`b[1]=3`,二者可以同时大于零。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如先后输入 `(1,2)`、`(1,3)`,每次均有 `x<y`,但第二次仍须解除旧配对,因此相应语句会执行。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 两侧编号分别互不相同时,所有 $m$ 对都能保留,零元素总数为 $2(n-m)=2n-2m$。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 所有 `y` 相同时,最终只能保留其中一对配对,故零元素总数为 $2n-2$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 递归把一个 $2^n\times2^n$ 的矩阵分成四个子矩阵,左上、右上、左下保持当前值 `t`,右下取反。到单个元素时写入 `t`。初始元素为 $0$。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 34 | 35 | 36 | 37 | 38 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | D | B | B | B |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** C(`t`)
|
||||
|
||||
**解析:** `n==0` 时对应单个元素,其值就是参数 `t`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** D(`x,y`)
|
||||
|
||||
**解析:** 左上子矩阵的左上角不变,应继续使用坐标 `x,y`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** B(`x+step,y+step`)
|
||||
|
||||
**解析:** 右下子矩阵的行、列起点都需加上 `step`,并由已有参数 `!t` 实现取反。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** B(`n, 0`)
|
||||
|
||||
**解析:** 初始调用需递归 $n$ 层,且原始元素为 $0$,因此传入 `n,0`。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** B(`1<<n`)
|
||||
|
||||
**解析:** 变换 $n$ 次后的边长为 $2^n$,对应位移表达式 `1<<n`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序按坐标字典序排序、去重,再枚举矩形的左下和右上顶点,通过二分查找确认另两个顶点是否存在,从而统计边平行于坐标轴的矩形。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 39 | 40 | 41 | 42 | 43 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | D | C | B | D |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** B(`a.x != b.x ? a.x < b.x : a.y < b.y`)
|
||||
|
||||
**解析:** 比较函数应先比较 `x`,再比较 `y`;只比较坐标,才能与后续按坐标构造的查询点一致。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** D(`t == 0 || !equals(A[i], A[t-1])`)
|
||||
|
||||
**解析:** 当尚未保留任何点,或当前点与最后保留的点坐标不同时,才把当前点加入去重结果。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** C(`(a+b) >> 1`)
|
||||
|
||||
**解析:** 区间更新为 `a=mid+1` 或 `b=mid`,应使用向下取整的中点 `(a+b)>>1`,保证区间收缩。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** B(`cmp(A[mid], p)`)
|
||||
|
||||
**解析:** 当 `A[mid]` 按同一比较规则小于目标点 `p` 时,目标应在右侧,因此使用 `cmp(A[mid],p)`。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** D(`A[i].x < A[j].x && A[i].y < A[j].y`)
|
||||
|
||||
**解析:** 要求两点满足 `x`、`y` 坐标均严格递增,以分别作为左下和右上顶点,避免退化矩形和重复计数。
|
||||
@@ -0,0 +1,334 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 03 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 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$。
|
||||
@@ -0,0 +1,338 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 04 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | C | D | B | A | A | C | C |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | B | C | D | A | B | C |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** Linux 可执行文件没有统一的默认扩展名;能否执行主要由文件格式及执行权限决定,因此前三项均不符合。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 数组已经有序时,第一趟仍需进行 $n-1$ 次相邻比较。由于没有交换,`FLAG` 保持为 $1$,外层循环随后结束。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 按字节寻址时,$32$ 位地址总线可表示 $2^{32}$ 个地址,对应 $2^{32}$ 字节,即 $4\ \mathrm{GB}$。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 无向完全图中,每两个不同顶点之间恰有一条边,因此边数为 $\binom72=7\times6/2=21$。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** CPU 负责执行运算和控制程序运行。易失性存储器断电后可能丢失数据,屏幕尺寸与分辨率不具有一一对应关系,接入互联网也不限于 Wi-Fi。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 从 $A_0$ 进入 $A_1$ 后,$A_1$ 的未访问邻接点 $A_3$ 必须先被访问,不能直接转到与 $A_1$ 不相邻的 $A_2$,因此选项 A 不可能。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 顺序存储且根下标为 $1$ 时,下标为 $i$ 的结点的左右孩子下标分别为 $2i$、$2i+1$。因此下标为 $k$ 的结点,其父结点下标为 $\lfloor k/2\rfloor$。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** IPv4 地址的每一段为 $8$ 位,取值范围是 $0$ 至 $255$。选项 C 中出现了 `256`,超出了该范围。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 将三进制数按位权展开,可得 $3Z=6X+2Y$。结合数字范围及首位不为零,得到 $X=1,Y=0,Z=2$。于是 $(10)_3\times(21)_3=(210)_3$,对应 `ZXY`。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 将三个盘子中的苹果数按从大到小排列,可得 $(7,0,0)$、$(6,1,0)$、$(5,2,0)$、$(5,1,1)$、$(4,3,0)$、$(4,2,1)$、$(3,3,1)$、$(3,2,2)$,共 $8$ 种。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 先合并权值 $300$ 和 $400$,得到新结点 $700$。按同权时优先选择合并结点的规则,再合并 $600$ 和这个新结点,最后与原权值 $700$ 合并。“也”所在叶结点的深度为 $3$,编码长度为 $3$。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 递推式展开后为 $T(n)=1+\sum_{i=1}^{n}i=1+n(n+1)/2$,所以时间复杂度为 $O(n^2)$。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 只打开 `B`、关闭其余阀门时,水能沿对应管道到达果树,且不会从 `A` 处流失,因此选 A。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $10000=2^4\times5^4$。在 $1$ 至 $10000$ 中,去掉能被 $2$ 或 $5$ 整除的数,并加回被重复扣除的 $10$ 的倍数,得到 $10000-5000-2000+1000=4000$ 个。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** `num[i]` 表示以第 `i` 个元素结尾的最长严格递增子序列长度。程序尝试由前面更小的元素转移,最后取所有 `num[i]` 的最大值。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | × | √ | D | B |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 算法只比较元素大小,负数同样可以参与比较,不会仅因输入为负数而出错。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 长度为 $n$ 的序列,其子序列最多包含 $n$ 个元素,因此 `ans<=n`。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如序列 `1,2` 中,初始两项的 `num` 都为 $1$;必须允许相等时更新,才能把第二项改为 $2$。改成严格大于后会漏掉这次转移。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 当 `num[i]==ans` 时,无论是否再次赋值,`ans` 的数值都不变,因此修改不影响最大值。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 所有数相等时,不存在严格递增的相邻选取关系,最长严格递增子序列只能取一个元素,输出 $1$。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 样例的动态规划长度依次为 $1,1,2,3,4,3,2,4,5,3$,最大值为 $5$;例如可取 `2,5,7,10,15`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 每个区间取最小元素为根,递归处理左右区间,最终计算各结点深度与对应 `b` 值的乘积之和,可视为在最小笛卡尔树上求加权深度和。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | A | D | D | B |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 即使最小值重复,程序也会选择扫描到的第一个最小值作为分界点,左右递归区间仍严格缩小,因此重复本身不会导致错误。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 每个结点的贡献都是 `depth*b[mink]`,当所有 `b` 均为零时,输出必为零。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 最坏情况下每次最小值都位于端点,扫描次数为 $100+99+\cdots+1=5050$,最接近 $5000$。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 最好情况下形成尽量平衡的树。$100$ 个结点的最小深度和为 $580$,相应扫描总次数也为 $580$,最接近 $600$。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 将权值 $1$ 至 $10$ 依次安排在深度 $1$ 至 $10$ 的链上,可得到最大加权深度和 $1^2+2^2+\cdots+10^2=385$。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 按层尽量填满的树使总深度最小,得到 $1\times1+2\times2+3\times4+4\times8+5\times16+6\times32+7\times37=580$。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** `A[i][j]` 由杨辉三角递推得到组合数 $\binom ij$ 对 `MOD` 取模的值;`sum` 为该数组的二维前缀和,同样对 `MOD` 取模。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | × | √ | C | C |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 对角线元素为 $A[i][i]=\binom ii=1$,并不是零。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 该递推计算的是组合数而非排列数,且保存的是组合数对 `MOD` 取模后的值。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 前缀和取模后可能从较大的值回绕到较小值,因此不能保证所述单调关系。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 在取模前额外加一个 `MOD`,不会改变对 `MOD` 取模后的余数。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 前 $10$ 行的最大组合数为 $\binom{10}5=252$,这些值均小于模数,因此无需考虑取模改变数值。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 查询为 `sum[5][3]`,即将前 $5$ 行、前 $3$ 列的组合数求和,结果为 $1+3+7+14+25=50$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序对可切出的整数长度进行二分。长度为 `mid` 时,第 `i` 根绳子可切出 `len[i]/mid` 段;总段数随候选长度增大而不增加,满足二分判定的单调性。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 34 | `count = count + len[i]` |
|
||||
| 35 | `count < m` |
|
||||
| 36 | `lbound < ubound` |
|
||||
| 37 | `(lbound + ubound + 1) / 2` |
|
||||
| 38 | `count = count + len[i] / mid` |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `count = count + len[i]`
|
||||
|
||||
**解析:** 先累加绳子总长度,等价于计算每段长度为 $1$ 时最多能切出的段数。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `count < m`
|
||||
|
||||
**解析:** 若总长度仍小于所需段数 `m`,则即使每段仅长 $1$ 也无法满足要求,应判定失败。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `lbound < ubound`
|
||||
|
||||
**解析:** 候选上下界尚未重合时继续二分,故条件为 `lbound<ubound`。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `(lbound + ubound + 1) / 2`
|
||||
|
||||
**解析:** 可行时更新为 `lbound=mid`,需使用向上取整的中点 `(lbound+ubound+1)/2`,避免只差 $1$ 时陷入死循环。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `count = count + len[i] / mid`
|
||||
|
||||
**解析:** 当前绳子能提供 `len[i]/mid` 段,应把它累加到总段数 `count` 中。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序按字典序生成从 $n$ 个数中选出 $m$ 个数的无重复排列。每次从右向左寻找可增大的位置,释放旧值,再把后缀填成最小的可用排列。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 39 | `false` |
|
||||
| 40 | `used[data[i]] = false` |
|
||||
| 41 | `j` |
|
||||
| 42 | `n` |
|
||||
| 43 | `break` |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** `false`
|
||||
|
||||
**解析:** 每轮先假定不存在后继排列,将 `flag` 置为 `false`;找到合法增大位置后再改为真。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** `used[data[i]] = false`
|
||||
|
||||
**解析:** 尝试替换第 `i` 位之前,必须释放其原值,执行 `used[data[i]]=false`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** `j`
|
||||
|
||||
**解析:** `j` 是当前找到的更大且尚未使用的数,应赋给 `data[i]`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** `n`
|
||||
|
||||
**解析:** 候选数字范围为 $1$ 至 $n$,因此补后缀时内层枚举上界应为 `n`。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** `break`
|
||||
|
||||
**解析:** 已找到并构造出紧邻的下一个排列后,应退出从右向左的扫描,执行 `break`。
|
||||
@@ -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]`。
|
||||
@@ -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`。
|
||||
@@ -0,0 +1,334 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 07 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | A | D | A | A | A | C | C | A |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | B | C | A | C | B | A |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 早期电子计算机首先用于科学与工程中的数值计算,例如数值表和复杂算式的计算。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 将两个二进制数对齐后逐位进行与运算,只有两位均为 $1$ 时结果才为 $1$,得到 `01 0010 1000 0011`。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 存储单元的唯一标识称为地址,CPU 根据地址读写相应的存储单元。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 每两轮形成 `ASDFasdf` 的 $8$ 字符循环。$81\bmod8=1$,因此第 $81$ 个字符是大写 `A`。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 所需空间为 $800\times600\times16/8=960000$ 字节,即 $960000/1024=937.5\ \mathrm{KB}$。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 先将第一个数作为当前最大值,再依次与其余 $N-1$ 个数比较。每次比较至多排除一个候选最大值,因此至少需要 $N-1$ 次比较。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 在题目的理论模型中,机器字长和地址宽度不同,会导致可寻址空间不同;显示器、硬盘容量和输入法不由 32 位或 64 位这一分类直接决定。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 按边数分类:$3$ 条边时有路径和星形两种,$4$ 条边时有四边形和三角形带一条悬挂边两种,$5$ 条边和 $6$ 条边时各一种,共 $2+2+1+1=6$ 种。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 最少比较次数出现在输入数组已经有序时:第一趟比较 $n-1$ 对相邻元素,没有交换,随后外层循环结束。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 先计算 `b+c`,其后缀表达式为 `bc+`;再与 `a` 相乘,最后与 `d` 相乘,得到 `abc+*d*`。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 从根开始依次沿右孩子到达图中最右下结点,其下标依次为 $1,3,7,15$,所以数组最大下标至少为 $15$。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** $13=8+4+1=(1101)_2$,$0.375=1/4+1/8=(0.011)_2$,合并得到 $(1101.011)_2$。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** `x & (x-1)` 每次恰好清除二进制表示中最右侧的一个 `1`。循环次数因此等于 `1` 的个数,所填语句为 `x &= x - 1`。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** CPU 负责执行运算和控制程序运行。易失性存储器断电后可能丢失数据,屏幕尺寸与分辨率不具有一一对应关系,接入互联网也不限于 Wi-Fi。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 对每个位置 `i`,程序输出从该位置向右、连续元素均不大于 `a[i]` 的最远端点 `ans`。若当前值比前一个值小,则重新从 `i` 开始寻找。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | √ | √ | D | A |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** `ans` 至少等于 `i`,但可能恰好等于 `i`;例如严格递增序列中每次输出就是当前位置,因此不保证严格大于。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 只有在 `ans<n` 时才执行递增操作,故 `ans` 不会超过 $n$。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 下降时两种条件都会重置;上升时重置为 `i` 也不会丢失合法的更远端点;相等时两种条件都不重置,因此结果不变。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `ans` 是连续满足约束的最远端点。既然已越过 `i+1`,该位置的值必然不大于 `a[i]`。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 严格递增时,每轮只需常数次判断,`ans` 随位置推进,整体时间复杂度为 $O(n)$。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 严格递减时,每个位置都会重置并向右扫描至末尾,总次数为 $n+(n-1)+\cdots+1$,最坏复杂度为 $O(n^2)$。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序将 Base64 字符映射为 6 位整数,再将每四个编码字符组合为至多三个原始字节。`ans` 是全局字符数组,输出时按以零结尾的 C 字符串处理。题目规定 `char` 为有符号的 8 位类型。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | √ | B | B | C |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 限定的字符集合是 Base64 编码的输入字符集;解码结果可以包含空格等其他字符,因此该断言错误。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 例如 `YQ==` 解码为 `a`,`YQA=` 解码为 `a` 后跟零字节。用 `%s` 输出时都会在零字节处结束,第二行同为 `a`。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `table[0]` 被初始化为全一位模式 `0xff`,在题目规定的有符号 8 位 `char` 中表示 $-1$,转为 `int` 后仍为 $-1$。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 循环每次处理 $4$ 个输入字符,每轮只进行常数次运算,总时间复杂度为 $O(n)$。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 将 `Y3Nx` 按 Base64 解码,依次得到字符 `c、s、q`,所以输出 `csq`。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 该字符串解码为 `ccf 2021`,其中 `ccf` 与年份之间有一个空格,不能省略。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** 程序先用 Floyd 算法求最短路,再枚举一对顶点,将其间距离设为零并更新最短路,最后取所有无序顶点对距离之和的最小值。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | √ | √ | A | A |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** Floyd 算法需要把中转顶点 `k` 放在最外层,保证阶段性状态含义;改为 `i,j,k` 后不再具有这一保证,结果可能改变。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 读入边需要 $O(m)$ 时间,后续枚举和更新需要 $O(n^4)$ 时间,整体可写为 $O(m+n^4)$,不能说所有运行步骤都与 $m$ 无关。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 在允许的图规模和边权下,最优距离总和也可能大于 $10^7$。若把 `ans` 初始化为该值,取最小值时就可能保留错误的初值。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 两次更新分别允许经由顶点 `i` 和 `j`,最终允许的中转顶点集合相同,因此交换这两次更新的顺序不影响结果。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 对给定图枚举置零的顶点对并计算更新后的无序点对最短路之和,最小结果为 $14$。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 代码使用“枚举中转点并松弛任意两点距离”的 Floyd 算法。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序用两次计数排序完成二关键字排序:先按次关键字 `b` 排序,再稳定地按主关键字 `a` 排序。`ord`、`res` 保存原数据下标,最终按 `a` 优先、`b` 次之输出。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 34 | 35 | 36 | 37 | 38 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | D | C | A | B |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** B(`++cnt[b[i]]`)
|
||||
|
||||
**解析:** 第一趟按 `b` 排序,因此应统计每个 `b[i]` 的出现次数,执行 `++cnt[b[i]]`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** D(`ord[--cnt[b[i]]] = i`)
|
||||
|
||||
**解析:** 前缀计数确定排序位置,需在 `ord[--cnt[b[i]]]` 中记录原数据下标 `i`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** C(`++cnt[a[i]]`)
|
||||
|
||||
**解析:** 第二趟以 `a` 为主关键字,因此统计 `a[i]` 的出现次数。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** A(`res[--cnt[a[ord[i]]]] = ord[i]`)
|
||||
|
||||
**解析:** 沿第一趟结果逆序扫描,并按 `a[ord[i]]` 放入最终位置,以保持相同 `a` 时原有的 `b` 顺序。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** B(`a[res[i]], b[res[i]]`)
|
||||
|
||||
**解析:** 最终排列保存在 `res` 中,应输出原数组中下标为 `res[i]` 的二元组。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序排序后,用资金最多的候选同学与价格最低的自行车配对,累计各人的不足金额,判断公共预算能否补足;再二分求最多可租车的人数。函数参数 `nn` 为本次待检验人数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 39 | `n-nn+1` |
|
||||
| 40 | `M[i] < C[j]` |
|
||||
| 41 | `count <= A` |
|
||||
| 42 | `check(mid)` |
|
||||
| 43 | `mid-1` |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** `n-nn+1`
|
||||
|
||||
**解析:** 应选取排序后资金最多的 `nn` 人,其第一人的下标是 `n-nn+1`。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** `M[i] < C[j]`
|
||||
|
||||
**解析:** 只有自行车价格高于该同学已有资金时才需公共预算补足,即判断 `M[i]<C[j]`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** `count <= A`
|
||||
|
||||
**解析:** 累计不足金额 `count` 不超过学校预算 `A` 时,本次人数可行,因此返回 `count<=A`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** `check(mid)`
|
||||
|
||||
**解析:** 将二分得到的候选人数 `mid` 交给判定函数,调用 `check(mid)`。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** `mid-1`
|
||||
|
||||
**解析:** 候选人数不可行时,应把右边界缩小到 `mid-1`,排除当前值及更大值。
|
||||
@@ -0,0 +1,334 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 08 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | B | D | A | A | A | A | B |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | C | B | B | D | C | A |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 蓝牙、Wi-Fi 和 GPRS 均属于无线通信技术;本题中的以太网指常见的有线局域网技术。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 光盘、磁盘和固态硬盘均可保存数据;鼠标用于输入操作信息,不属于存储设备。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 编译器将源程序翻译为目标代码,供计算机进一步链接或执行,本题对应将源程序翻译成机器指令代码。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** `s` 先被赋为 `a`,随后循环执行 `c` 次减一操作,因此最终为 `s=a-c`。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 将元素两两分组,先比较每组大小,再分别在较大元素中找最大值、在较小元素中找最小值,最坏情况下共需 $\lceil3N/2\rceil-2$ 次比较。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 三个数字各不相同时有 $3!=6$ 种。数字 `1` 出现两次时,另一位可选 `2` 或 `3`,共 $2\times3=6$ 种;数字 `2` 出现两次时同样有 $6$ 种。合计 $18$ 种。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 先令新结点的 `next` 指向原栈顶 `hs`,再令 `hs` 指向新结点 `s`,即依次执行 `s->next=hs; hs=s;`。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 有 $n$ 个顶点的树恰有 $n-1$ 条边。原图有 $m$ 条边,保留一棵生成树后需删除 $m-(n-1)=m-n+1$ 条边。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 球和袋子都不可区分,等价于将 $8$ 分拆为至多 $5$ 个正整数。按非空袋子数 $1,2,3,4,5$ 分类,分别有 $1,4,5,5,3$ 种,共 $18$ 种。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。因为 $32\le61\le63$,所以高度为 $6$。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $10000=2^4\times5^4$。在 $1$ 至 $10000$ 中,去掉能被 $2$ 或 $5$ 整除的数,并加回被重复扣除的 $10$ 的倍数,得到 $10000-5000-2000+1000=4000$ 个。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 前两轮只将 `n` 增加到 $1$、$2$。第三轮 `n=3`,满足 `n%3==0`,执行 `k--` 后 `k=3`;循环条件 `n<k` 不再成立,输出 `3,3`。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 操作系统负责管理 CPU、内存、外部设备等硬件资源,并为程序运行和用户操作提供统一的管理与服务。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 为避免 Jacob 看到照片,不能直接分享给他,也不能分享给他的朋友,否则这些朋友的评论会使照片对他可见。图中 Dana、Michael、Eve 符合条件,对应 A。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序根据两球球心距离与半径关系,分别处理相离、包含及部分相交三种情形,计算两球交集体积。常数 `r=acos(0.5)=π/3`,最后保留四位小数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | × | × | √ | D | C |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 在题目给定坐标范围内,整数计算的距离平方可被 `double` 精确表示,后续计算数值不变,因此修改类型不影响结果。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 先除以 `sqrt(t)` 时会进行浮点除法;若先除以整数 $2$,分子可能先被整数截断,结果可能改变。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** `sq` 的形参为 `int`,把浮点数 `x、y` 传入时会先截断小数,与直接计算 `x*x、y*y` 不同。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 两球半径均为 $1$、球心距离为 $1$,交集体积为 $5π/12\approx1.3090$,与题述输出相同。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 两球球心均为 `(1,1,1)`,半径为 $1$、$2$,交集就是半径为 $1$ 的球,体积为 $4π/3\approx4.1888$。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 包含时取较小球体积,相离时输出零,部分相交时相加两个球冠体积,因此求的是两球体积的交集。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 当 $k>1$ 时,数组 `d` 模拟 $k$ 进制计数,`len` 为有效位数,`ans` 记录进位次数。因此 $\mathrm{ans}=\sum_{t\ge1}\lfloor n/k^t\rfloor$。当 $k=1$ 时应直接分析程序,此时每轮恰有一次进位,最终 `ans=n`。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | √ | D | B | D |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 当 $k=1$ 时,第一轮使 `len` 变为 $2$,随后不再增加,因此 `len` 并不总等于 $n$。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 取 $n=1,k=2$,最终 `len=1`,并不小于 $n$,即可构成反例。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `len` 是 $n$ 的 $k$ 进制位数,满足 $k^{\mathrm{len}-1}\le n<k^{\mathrm{len}}$,因此该不等式成立。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** $k=1$ 时每次外层循环使 `ans` 加一,执行 $n$ 次后结果为 $n=10^{15}$。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 进位总数为 $3^{29}+3^{28}+\cdots+1=(3^{30}-1)/2$。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 按公式依次累加 $\lfloor n/10\rfloor、\lfloor n/10^2\rfloor$ 等,得到 $11112222444453$,对应 D。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** 程序通过线性筛求约数函数。`f[x]` 是正约数个数,`g[x]` 是正约数之和,`c`、`d` 辅助维护最小质因子的幂次及其余部分。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | × | × | A | C | C |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `f[1]=g[1]=1` 只为输入 $1$ 的结果提供初值;大于 $1$ 的项由质数分支或递推独立得到,因此其他输入不受影响。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** `c[i*k]` 等于 `i` 中相应质因子指数加一,恰是约数个数乘积公式中的一个因子,因此该除法能够整除。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 约数和也不单调,例如 `g[6]=12`,而 `g[7]=8`,由 $6$ 到 $7$ 反而减小。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 每个合数只由其最小质因子筛到一次,所有筛选与转移的总时间为 $O(n)$。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 正约数恰有两个的数正是质数,$1$ 至 $100$ 中共有 $25$ 个质数。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $1000=2^3\times5^3$,约数个数为 $(3+1)^2=16$,约数和为 $(1+2+4+8)(1+5+25+125)=2340$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 将排列值映射到其原位置,按原位置建立双向链表,再按数值从小到大删除相应结点。删除某位置时,尚在其右边的最近结点就是该位置右侧第一个更大的元素。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 34 | `a[x] = i` |
|
||||
| 35 | `i+1` |
|
||||
| 36 | `R[a[i]]` |
|
||||
| 37 | `a[i]` |
|
||||
| 38 | `R[i]` |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `a[x] = i`
|
||||
|
||||
**解析:** 读到位置 `i` 的值为 `x`,应记录值 `x` 所在的位置,即 `a[x]=i`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `i+1`
|
||||
|
||||
**解析:** 初始按位置顺序相连,位置 `i` 的右邻为 `i+1`,最后一个结点的右邻为哨兵 `n+1`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `R[a[i]]`
|
||||
|
||||
**解析:** 删除 `a[i]` 时,其右邻的左指针应越过该结点,故左侧下标为 `R[a[i]]`。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `a[i]`
|
||||
|
||||
**解析:** 其左邻的右指针也应越过当前结点,接到 `R[a[i]]`,所填下标为 `a[i]`。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `R[i]`
|
||||
|
||||
**解析:** `R[i]` 已保留位置 `i` 右边第一个更大元素的位置;不存在时为哨兵 `n+1`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序从后向前枚举保留的后缀,维护后缀总分与最低分,删除最低分后计算平均分,记录达到最大平均分的前缀删除长度。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 39 | 40 | 41 | 42 | 43 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | B | D | C | B |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** C(`sum=s[n]`)
|
||||
|
||||
**解析:** 开始枚举前,后缀只有最后一项,应令 `sum=s[n]`。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** B(`sum+=s[i]`)
|
||||
|
||||
**解析:** 将第 `i` 项纳入当前后缀后,需要执行 `sum+=s[i]`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** D(`(double)(sum-minScore)/(n-i)`)
|
||||
|
||||
**解析:** 后缀含 $n-i+1$ 项,去掉最低分后剩 $n-i$ 项,平均分为 `(double)(sum-minScore)/(n-i)`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** C(`cnt=1;k[cnt]=i-1;`)
|
||||
|
||||
**解析:** 发现更优平均分时,应清空此前候选,把当前删除的前缀长度 `i-1` 作为首个结果保存。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** B(`k[++cnt]=i-1;`)
|
||||
|
||||
**解析:** 平均分相同时追加当前答案,执行 `k[++cnt]=i-1`,保留所有达到最优值的删除长度。
|
||||
@@ -0,0 +1,334 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 09 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | A | B | C | D | A | A | A |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | C | B | C | B | B | C |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** C 语言属于过程式程序设计语言;其余选项中的 C++、Python 和 Java 均支持面向对象程序设计。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 存储单元的唯一标识称为地址,CPU 根据地址读写相应的存储单元。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 广域网的英文为 Wide Area Network,缩写为 WAN;LAN 和 MAN 分别表示局域网和城域网。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 共有 $2048\times1024$ 个像素,每个像素占 $32/8=4$ 字节。总空间为 $2048\times1024\times4=8\times1024^2$ 字节,即 $8\ \mathrm{MB}$。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 若先输出 `c`、`d`,则 `a`、`b` 仍在栈中,且 `b` 位于 `a` 上方。在输出 `a` 之前必须先输出 `b`,因此 `c,d,a,e,b` 不合法。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 折半查找每次将候选范围约减半,最坏比较次数为 $\lfloor\log_2 100\rfloor+1=7$。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 含 $n$ 个顶点的连通无向图至少有 $n-1$ 条边;取一棵生成树即可达到这个最小值。因此 $10$ 个顶点可用 $9$ 条边构成连通图。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 先给每个班分配一个名额,再将剩余 $3$ 个相同名额分给 $7$ 个不同班级。由隔板法,方案数为 $\binom{3+7-1}{7-1}=\binom96=84$。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。因为 $32\le61\le63$,所以高度为 $6$。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 球和袋子都不可区分,等价于将 $8$ 分拆为至多 $5$ 个正整数。按非空袋子数 $1,2,3,4,5$ 分类,分别有 $1,4,5,5,3$ 种,共 $18$ 种。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 哈夫曼算法每次选择当前权值最小的两个结点合并,以局部最优选择构造整体最优编码树,属于贪心策略。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 递归展开为 $7\times\operatorname{solve}(5)=7\times5\times\operatorname{solve}(3)=7\times5\times3\times2=210$。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 从 `a` 出发的深度优先搜索,最后访问的顶点可以是 `b` 或 `e`,其余两点均不能成为最后访问的顶点,因此共有 $2$ 个。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 安排用时为 $1$、$2$ 的两人先过河,用时 $1$ 的人返回;再让用时 $4$、$8$ 的两人过河,用时 $2$ 的人返回;最后前两人一起过河。总时间为 $2+1+8+2+2=15$。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 由辗转相除法,$377=319+58$,$319=5\times58+29$,$58=2\times29$,所以最大公约数为 $29$。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序枚举字符串长度 $n$ 的所有正因数 $i$,检查下标为 `i-1` 的字符,并对满足 `c>='a'` 的字符进行减去大小写编码差的转换。可能被修改的位置数等于 $n$ 的正因数个数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | × | √ | B | B |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** `scanf("%s",st)` 可以读取不含空白的数字、标点等字符,并不限于大小写字母。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 当 `i=0` 时,第一次计算 `n%i` 就会出现除数为零的问题,因此程序不能正常执行。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 将循环上界缩小到 $\sqrt n$ 后,会漏掉大于 $\sqrt n$ 的因数对应的位置,因此输出可能改变。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 大写字母的编码均小于小写字母 `a`,不满足修改条件,因此字符串保持不变。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $18$ 的正因数为 $1,2,3,6,9,18$,共 $6$ 个;让这些位置都为小写字母即可使 $6$ 个字符发生变化。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $100000=2^5\times5^5$,正因数个数为 $(5+1)(5+1)=36$。其余三个长度的因数个数分别为 $9、1、8$。
|
||||
|
||||
##### 程序(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)
|
||||
|
||||
**程序分析:** 程序通过线性筛求约数函数。`f[x]` 是正约数个数,`g[x]` 是正约数之和,`c`、`d` 辅助维护最小质因子的幂次及其余部分。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | × | × | A | C | C |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `f[1]=g[1]=1` 只为输入 $1$ 的结果提供初值;大于 $1$ 的项由质数分支或递推独立得到,因此其他输入不受影响。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** `c[i*k]` 等于 `i` 中相应质因子指数加一,恰是约数个数乘积公式中的一个因子,因此该除法能够整除。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 约数和也不单调,例如 `g[6]=12`,而 `g[7]=8`,由 $6$ 到 $7$ 反而减小。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 每个合数只由其最小质因子筛到一次,所有筛选与转移的总时间为 $O(n)$。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 正约数恰有两个的数正是质数,$1$ 至 $100$ 中共有 $25$ 个质数。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $1000=2^3\times5^3$,约数个数为 $(3+1)^2=16$,约数和为 $(1+2+4+8)(1+5+25+125)=2340$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序用二进制快速幂计算 $x^p\bmod m$。指数为奇数时把当前底数乘入结果,然后指数折半、底数平方,每次乘法后取模。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 34 | `1` |
|
||||
| 35 | `p > 0` |
|
||||
| 36 | `result * x % m` |
|
||||
| 37 | `x * x % m` |
|
||||
| 38 | `result` |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `1`
|
||||
|
||||
**解析:** 乘法的单位元为 $1$,因此结果累加器初始化为 `1`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `p > 0`
|
||||
|
||||
**解析:** 指数尚未全部处理时继续循环,条件为 `p>0`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `result * x % m`
|
||||
|
||||
**解析:** 当当前二进制位为 $1$ 时,应执行 `result=result*x%m`。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `x * x % m`
|
||||
|
||||
**解析:** 指数每次除以二,底数需相应平方并取模,即 `x*x%m`。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `result`
|
||||
|
||||
**解析:** 最终所求余数保存在 `result` 中,直接输出即可。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序模拟编号为 $0$ 至 $n-1$ 的约瑟夫环,每隔一名存活者淘汰一人。`F` 标记淘汰状态,`c` 记录已淘汰人数,`p` 在存活者之间交替计数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 39 | 40 | 41 | 42 | 43 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | C | C | D | B |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** D(`c < n - 1`)
|
||||
|
||||
**解析:** 保留一人时结束,因此循环条件为 `c<n-1`,对应选项 D。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** C(`p`)
|
||||
|
||||
**解析:** `p` 为真时淘汰当前存活者,为假时跳过,所填条件为 `p`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** C(`c++`)
|
||||
|
||||
**解析:** 每淘汰一人,已淘汰人数加一,应执行 `c++`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** D(`p ^= 1`)
|
||||
|
||||
**解析:** 每访问一名存活者后切换淘汰与跳过状态,执行 `p^=1`。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** B(`i = (i+1) % n`)
|
||||
|
||||
**解析:** 沿环前进并在到达 $n$ 时回到 $0$,执行 `i=(i+1)%n`,对应选项 B。
|
||||
@@ -0,0 +1,334 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 10 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | A | B | D | A | B | D | A |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | A | A | A | B | B | C | C |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 全国青少年计算机程序设计竞赛(NOI)由中国计算机学会于 1984 年创办。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 计算机使用二进制的 `0` 和 `1` 表示、存储及处理数据,字符、图像等信息也需先编码为二进制。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 图灵奖是计算机科学领域的重要奖项;其余奖项分别主要面向电影、自然科学及文学等领域、新闻等领域。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 前三项均等于十进制 $617$:$(269)_{16}=617$,$(1151)_8=617$。而 $(1001101011)_2=512+64+32+8+2+1=619$,因此 D 不同。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 链表元素的存储位置不必连续,访问第 $i$ 个元素通常需要沿指针依次查找,因此不支持像数组那样按下标直接随机访问任一元素。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 故事内容不断包含与自身结构相同的子故事,对应函数在执行过程中调用自身的递归思想。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 有 $n$ 个顶点的树恰有 $n-1$ 条边。原图有 $m$ 条边,保留一棵生成树后需删除 $m-(n-1)=m-n+1$ 条边。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 将双胞胎视为一个整体,与其余 $3$ 人共形成 $4$ 个排列单位,有 $4!$ 种;双胞胎内部还有 $2!$ 种顺序,共 $4!\times2!=48$ 种。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 高度为 $5$ 时,前 $4$ 层必须填满,最后一层可从左到右放置 $1$ 至 $16$ 个结点。结点数确定后形态唯一,因此有 $16$ 种形态。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 先从 $5$ 种颜色中选出形成完整手套的 $2$ 种,再从剩余 $3$ 种中选出 $2$ 种,各取一只。单只手套分别有左右手两种选择,因此共有 $\binom52\binom32\times2^2=120$ 种。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 若四种花色各至多取 $3$ 张,则总数至多为 $12$ 张。现取 $13$ 张,根据抽屉原理,至少有一种花色取到 $4$ 张。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 递归先求前 $n-1$ 个元素的最小值,再与第 $n$ 个元素比较并返回较小者,因此最终返回整个数组的最小值。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 后序遍历末尾的 `A` 为根;用中序遍历划分左右子树,再递归确定各子树根结点,可得前序遍历为 `ABDEGHJCFI`。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 根下标为 $1$,图中连续三次取右孩子得到下标 $1\to3\to7\to15$,所以最大下标至少为 $15$。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(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)
|
||||
|
||||
**程序分析:** 利用恒等式 $u+v-(u\mathbin{\&}v)=u\mathbin{|}v$,程序在所有数值不相同的元素对中寻找最大的按位或值;若不存在这样的元素对,保留初值 $-1$。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | √ | √ | C | C |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 数组合法下标为 $0$ 至 $999$,因此输入 $n=1000$ 时仍不会越界;不是必须严格小于 $1000$。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 若所有输入值都相同,条件始终不成立,`ans` 保持为 $-1$,所以输出不一定非负。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 例如序列 `2,1`,原循环会处理“较小值在后、较大值在前”的有序对;限制 `j=i+1` 会漏掉该比较,输出可能改变。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 按位或具有交换性。把严格小于改为不等于只会同时处理反向的一对,不会改变最大值。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 若出现 $128$,只要与某个不同值配对,其按位或的结果就至少为 $128$;若全部为 $128$ 则输出为 $-1$。两种情况都不可能得到 $127$。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 按位或结果为偶数,说明参与得到该结果的两个数最低位均为零,因此输入中至少有两个偶数。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** 程序模拟长除法,`b` 保存商的各位,`a` 保存待除数(余数乘十)。若待除数重复,就找到了循环节;若余数变为零,则小数终止。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | √ | × | C | D |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 当 `n==m` 且 `m!=0` 时,整数部分为 $1$、余数为零,可以正常结束,不要求两个输入不同。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 程序包含整数除法和取模,除数 `m` 必须非零。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 循环可因检测到重复待除数而执行 `break`,也可因余数为零而使 `do...while` 条件不成立,共有两种退出途径。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如输入 `1 3` 时,会出现待除数 $10$,已经大于初始的 $n=1$,因此该限制不成立。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $11/8=1.375$,是有限小数,不需循环节括号,因此输出 `1.375`。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 输入为 `5 13`,$5/13=0.\overline{384615}$,输出为 `0.(384615)`,对应 D。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序排序后,用资金最多的候选同学与价格最低的自行车配对,累计各人的不足金额,判断公共预算能否补足;再二分求最多可租车的人数。函数参数 `nn` 为本次待检验人数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 34 | `n-nn+1` |
|
||||
| 35 | `M[i] < C[j]` |
|
||||
| 36 | `count <= A` |
|
||||
| 37 | `check(mid)` |
|
||||
| 38 | `mid-1` |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `n-nn+1`
|
||||
|
||||
**解析:** 应选取排序后资金最多的 `nn` 人,其第一人的下标是 `n-nn+1`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `M[i] < C[j]`
|
||||
|
||||
**解析:** 只有自行车价格高于该同学已有资金时才需公共预算补足,即判断 `M[i]<C[j]`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `count <= A`
|
||||
|
||||
**解析:** 累计不足金额 `count` 不超过学校预算 `A` 时,本次人数可行,因此返回 `count<=A`。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `check(mid)`
|
||||
|
||||
**解析:** 将二分得到的候选人数 `mid` 交给判定函数,调用 `check(mid)`。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `mid-1`
|
||||
|
||||
**解析:** 候选人数不可行时,应把右边界缩小到 `mid-1`,排除当前值及更大值。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序从指定格子出发,按马的八种走法回溯。移动前同时检查是否在棋盘内、是否访问过;`tot` 记录已移动的步数,访问满整个棋盘时增加方案数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 39 | 40 | 41 | 42 | 43 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | B | D | A | D |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** C(`x>=0 && y>=0 && x<r && y<c`)
|
||||
|
||||
**解析:** 合法下标应同时满足 `x>=0 && y>=0 && x<r && y<c`,四个条件缺一不可。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** B(`check(x+wayr[i] , y+wayc[i])`)
|
||||
|
||||
**解析:** 应检查移动后的目标位置,因此调用 `check(x+wayr[i],y+wayc[i])`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** D(`!mark[x+wayr[i]][y+wayc[i]]`)
|
||||
|
||||
**解析:** 目标格不能已被访问,故还需判断 `!mark[x+wayr[i]][y+wayc[i]]`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** A(`tot==r * c-1`)
|
||||
|
||||
**解析:** 起点已占一个格子,走满 $r\times c$ 个格子需再移动 $r*c-1$ 步,因此条件为 `tot==r*c-1`。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** D(`x+wayr[i], y+wayc[i]`)
|
||||
|
||||
**解析:** 下一层递归的坐标应是当前坐标加上本次移动向量,即 `x+wayr[i],y+wayc[i]`。
|
||||
@@ -0,0 +1,338 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 11 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | C | B | C | A | D | A | C |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | A | D | C | D | B | A、B、B、B | A |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 按题目采用的 $1024$ 进位约定,$1\ \mathrm{TB}=1024^4\ \mathrm{B}=2^{40}\ \mathrm{B}$。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** PENTIUM(奔腾)、酷睿和赛扬均为 CPU 的产品系列或型号名称。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 全国青少年计算机程序设计竞赛(NOI)由中国计算机学会于 1984 年创办。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** Photoshop 是图像编辑应用软件;Windows、DOS 和 NOI Linux 均属于操作系统。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** FTP 是文件传输协议,用于在网络中的计算机之间传输文件。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 蓝牙、Wi-Fi 和 GPRS 均属于无线通信技术;本题中的以太网指常见的有线局域网技术。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 图灵奖用于表彰对计算机科学作出重要贡献的人物,是计算机科学领域的最高荣誉之一。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $(101.11)_2=2^2+2^0+2^{-1}+2^{-2}=4+1+0.5+0.25=5.75$。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 先给每个班分配一个名额,再将剩余 $3$ 个相同名额分给 $7$ 个不同班级。由隔板法,方案数为 $\binom{3+7-1}{7-1}=\binom96=84$。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 8 位无符号整数的范围是 $0$ 至 $2^8-1=255$。选项中能表示的数为 $133$ 和 $199$,其中较大的是 $199$。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 三人的选择相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 拓扑序列的第一个顶点不能有尚未排列的前驱,因此其原始入度必须为 $0$。有环图不存在拓扑序,拓扑序也不一定唯一;原始入度的大小不能决定所有顶点的排列先后。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 因特网源于计算机通信、分组交换和网络协议等技术的发展,并不是通过研究蜘蛛网而发明的,因此 B 的说法错误。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** (1)A;(2)B;(3)B;(4)B。
|
||||
|
||||
**解析:** 丙去了,由③知丁没去;由②的逆否命题知乙没去。结合④及丙去了,可推出甲去了。再结合①和乙没去,可推出周末没下雨。因此四空依次为 A、B、B、B。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 搜索过程中尝试构造解,在当前选择不能满足条件时撤销该选择并返回上一步继续尝试,这正是回溯法的基本过程。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 按题目采用的 32 位补码整数模型,`f(x)` 统计二进制表示中 `1` 的个数,`g(x)=x&(-x)` 提取最低位的 `1` 所代表的数值;程序输出二者之和。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | × | √ | × | B |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 数组 `a[1000]` 的合法下标是 $0$ 至 $999$。输入 $n=1001$ 时会访问 `a[1000]`,发生越界。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 零也是反例:`f(0)` 的循环一次也不执行,`g(0)=0`,程序不会因此陷入死循环。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 样例中的最后一个数为 $10$,其二进制为 `1010`,故 `f(10)=2`、`g(10)=2`,最后应输出 $4$,而不是 $5$。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** $511998$ 的二进制表示有 $16$ 个 `1`,最低位的 `1` 代表 $2$,因此输出 $16+2=18$。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 将 `g` 的定义移到 `main` 后面时,需先在调用前提供函数声明;否则编译器在调用处尚不知道 `g`。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 32 位补码下,$-65536$ 的二进制表示有 $16$ 个 `1`,最低位的 `1` 为 $65536$,输出 $65552$;$2147483647=2^{31}-1$,输出 $31+1=32$。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** `a[x]=y` 与 `b[y]=x` 维护两侧结点的一一配对,冲突配对会先解除。最后分别统计两数组中的零元素;若当前有 $t$ 对配对,输出为 $2n-2t$。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | × | × | × | A | A |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 第一对正编号结点必定可以配对,之后的更新不会使配对总数降为零,因此 $m>0$ 时最终至少有一对,输出小于 $2n$。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 最终答案为偶数,但某一次执行 `++ans` 后的中间值可以是奇数。例如仅配对 `(1,2)` 时,扫描 `i=1` 就可能使 `ans` 变为 $1$。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如输入配对 `(1,2)`、`(3,1)` 后,`a[1]=2`、`b[1]=3`,二者可以同时大于零。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如先后输入 `(1,2)`、`(1,3)`,每次均有 `x<y`,但第二次仍须解除旧配对,因此相应语句会执行。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 两侧编号分别互不相同时,所有 $m$ 对都能保留,零元素总数为 $2(n-m)=2n-2m$。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 所有 `y` 相同时,最终只能保留其中一对配对,故零元素总数为 $2n-2$。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** 程序先用 Floyd 算法求最短路,再枚举一对顶点,将其间距离设为零并更新最短路,最后取所有无序顶点对距离之和的最小值。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | √ | √ | A | A |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** Floyd 算法需要把中转顶点 `k` 放在最外层,保证阶段性状态含义;改为 `i,j,k` 后不再具有这一保证,结果可能改变。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 读入边需要 $O(m)$ 时间,后续枚举和更新需要 $O(n^4)$ 时间,整体可写为 $O(m+n^4)$,不能说所有运行步骤都与 $m$ 无关。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 在允许的图规模和边权下,最优距离总和也可能大于 $10^7$。若把 `ans` 初始化为该值,取最小值时就可能保留错误的初值。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 两次更新分别允许经由顶点 `i` 和 `j`,最终允许的中转顶点集合相同,因此交换这两次更新的顺序不影响结果。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 对给定图枚举置零的顶点对并计算更新后的无序点对最短路之和,最小结果为 $14$。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 代码使用“枚举中转点并松弛任意两点距离”的 Floyd 算法。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序在整数值域中二分中位数。对于候选 `mid`,统计严格大于它的元素个数;若多于半数,则中位数更大,否则中位数不超过当前值。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 34 | `rbound > lbound` |
|
||||
| 35 | `count = 0` |
|
||||
| 36 | `x[i] > mid` |
|
||||
| 37 | `count++` |
|
||||
| 38 | `rbound = mid` |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `rbound > lbound`
|
||||
|
||||
**解析:** 当左右边界尚未重合时继续二分,条件为 `rbound>lbound`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `count = 0`
|
||||
|
||||
**解析:** 每次更换候选值后,应重新统计,令 `count=0`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `x[i] > mid`
|
||||
|
||||
**解析:** 应统计严格大于 `mid` 的数,即 `x[i]>mid`。若用 `>=`,例如序列 `1,2,3` 会错误地把答案推到 $3$。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `count++`
|
||||
|
||||
**解析:** 每发现一个满足条件的元素,就使计数加一,执行 `count++`。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `rbound = mid`
|
||||
|
||||
**解析:** 严格大于 `mid` 的元素不超过一半时,中位数至多为 `mid`,应执行 `rbound=mid`。
|
||||
|
||||
##### 程序(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$。
|
||||
@@ -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` 中。
|
||||
@@ -0,0 +1,338 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 13 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | C | B | C | A | D | C | C |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | C | D | B | C | D | A |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** ATM 密码验证依据用户掌握的密码信息,不利用人体的生理或行为特征,因此不属于生物特征识别。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 每 $4$ 位二进制数对应 $1$ 位十六进制数,因此 $100$ 位二进制正整数需 $\lceil100/4\rceil=25$ 位十六进制数表示。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** C++ 支持类、对象、继承及多态等机制,是支持面向对象程序设计的高级语言。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** Wi-Fi 主要用于无线局域网,使终端在较小范围内通过无线方式接入网络。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 选项 A 可化为 $P\lor[\neg P\land(Q\lor\neg Q)]=P\lor\neg P$,其值恒为真。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 降低浮点数精度时,舍入可能使数值变大、变小或保持不变,但不会把正数变为负数,或把负数变为正数。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 前缀表达式对应 $3+2\times(5+12)$,结果为 $3+34=37$。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 图灵奖是计算机科学领域的最高荣誉之一,本题对应选项 C。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 三人的选择相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 若先序遍历为 `ACB`,则根为 `A`。由中序遍历 `BAC` 可知 `B` 在左子树、`C` 在右子树,先序遍历必须先访问 `B` 再访问 `C`,与 `ACB` 矛盾。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 选项 D 对关键字 $2,6,10,17$ 分别得到地址 $1,2,3,4$,互不相同,因此不会产生冲突。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 先令 `s->next=hs`,将新结点接到原栈顶之前;再令 `hs=s`,使栈顶指针指向新结点。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 逆序排列的 $5$ 个数共有 $\binom52=10$ 个逆序对。冒泡排序每次相邻交换恰好减少一个逆序对,因此需要 $10$ 次交换。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 最坏情况下,两数组的元素交错出现。在已经确定前 $2n-1$ 个元素后,剩余最后一个元素可直接放入结果,因此最坏比较次数为 $2n-1$。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** $A_1$ 的未访问邻接点为 $A_3$,深度优先搜索不能在访问 $A_1$ 后跳过 $A_3$ 而先访问 $A_2$,因此 A 不可能。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序枚举字符串长度 $n$ 的所有正因数 $i$,检查下标为 `i-1` 的字符,并对满足 `c>='a'` 的字符进行减去大小写编码差的转换。可能被修改的位置数等于 $n$ 的正因数个数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | × | √ | B | B |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** `scanf("%s",st)` 可以读取不含空白的数字、标点等字符,并不限于大小写字母。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 当 `i=0` 时,第一次计算 `n%i` 就会出现除数为零的问题,因此程序不能正常执行。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 将循环上界缩小到 $\sqrt n$ 后,会漏掉大于 $\sqrt n$ 的因数对应的位置,因此输出可能改变。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 大写字母的编码均小于小写字母 `a`,不满足修改条件,因此字符串保持不变。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $18$ 的正因数为 $1,2,3,6,9,18$,共 $6$ 个;让这些位置都为小写字母即可使 $6$ 个字符发生变化。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $100000=2^5\times5^5$,正因数个数为 $(5+1)(5+1)=36$。其余三个长度的因数个数分别为 $9、1、8$。
|
||||
|
||||
##### 程序(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)
|
||||
|
||||
**程序分析:** 程序随机选择枢轴,划分比枢轴小与不小的元素,并只递归进入包含第 $k$ 小值的部分,是快速选择算法。输入顺序不影响随机枢轴下的平均线性复杂度,但最坏情况仍可退化。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | B | B | A | D |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** `rand()%(R-L+1)+L` 的取值范围为闭区间 $[L,R]$,包括左端点 `L`。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 两个指针相遇后有 `a==b`,相应位置的 `d[a]` 与 `d[b]` 相同,替换不会改变该判断。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 随机枢轴使平均递归规模按比例缩小,单次划分为线性时间,平均总时间为 $O(n)$。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 随机选择枢轴后,初始数组严格递减也不会使平均复杂度改变,仍为 $O(n)$。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 平均复杂度为 $O(n)$;最坏情况下每次仅排除一个元素,总代价为 $n+(n-1)+\cdots+1=O(n^2)$。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 全部元素相等时,划分不能有效均分。求第 $n$ 小值会逐次缩短一个元素,时间复杂度退化为 $O(n^2)$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 目标是把前 $p$ 个元素整体移到末尾,保持两部分各自顺序。第一种方法借助辅助数组直接映射位置;第二种方法反复把后半部分当前元素插到前面。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 34 | `n-p+i` |
|
||||
| 35 | `a[i]` |
|
||||
| 36 | `n` |
|
||||
| 37 | `i-p+1` |
|
||||
| 38 | `a[i-p]` |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `n-p+i`
|
||||
|
||||
**解析:** 前 $p$ 个元素应放到辅助数组的最后 $p$ 个位置,第 `i` 项的新位置为 `n-p+i`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `a[i]`
|
||||
|
||||
**解析:** 后半段第 `i` 项应复制原数组当前元素 `a[i]`,并放入 `b[i-p]`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `n`
|
||||
|
||||
**解析:** 辅助数组填完后,应把全部 $n$ 项复制回原数组,因此循环上界为 `n`。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `i-p+1`
|
||||
|
||||
**解析:** 第 `i` 项要插入位置 `i-p`,需把 `i-p` 至 `i-1` 的元素右移一位,故倒序移动循环的下界为 `i-p+1`。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `a[i-p]`
|
||||
|
||||
**解析:** 腾出的插入位置是 `i-p`,应把暂存值写入 `a[i-p]`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序离线按身高排序并建立双向链表,再按进入教室的逆序删除同学。处理第 `i` 人时,链表中保留的恰是此前进入者,最近身高只可能来自其有序前驱或后继。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 39 | `i <= j` |
|
||||
| 40 | `next_pos[order[i]] = order[i+1]` |
|
||||
| 41 | `higher = height[next_pos[i]] - height[i]` |
|
||||
| 42 | `shorter < higher` |
|
||||
| 43 | `previous[next_pos[i]] = previous[i]` |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** `i <= j`
|
||||
|
||||
**解析:** 快速排序的两个扫描指针尚未交错时才能交换,条件为 `i<=j`。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** `next_pos[order[i]] = order[i+1]`
|
||||
|
||||
**解析:** 按身高顺序建立右邻链接,当前结点 `order[i]` 的后继应为 `order[i+1]`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** `higher = height[next_pos[i]] - height[i]`
|
||||
|
||||
**解析:** 若存在更高的后继,与其身高差为 `height[next_pos[i]]-height[i]`,应赋给 `higher`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** `shorter < higher`
|
||||
|
||||
**解析:** 只有更矮者严格更近时才选前驱。相等时题目要求选择更高者,因此条件应为 `shorter<higher`。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** `previous[next_pos[i]] = previous[i]`
|
||||
|
||||
**解析:** 删除当前结点后,其后继的前驱需接到当前前驱,执行 `previous[next_pos[i]]=previous[i]`。
|
||||
@@ -0,0 +1,334 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 14 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | A | D | D | A | C | C | D | C |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | A | B | B | B | A | B |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 一个字节为 $8$ 位,因此 $32$ 位整型变量占 $32/8=4$ 个字节。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** `00100100` 和 `00010101` 分别表示 $36$ 和 $21$,相加为 $57$,二进制结果为 `00111001`。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 汇编语言仍用于与硬件密切相关的程序和特定性能要求的场景,并未被完全淘汰,因此 D 的说法错误。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** FTP 是文件传输协议,用于在网络中的计算机之间传输文件。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 只含一种字母的不同非空子串有 $3\times3=9$ 个;跨越 `A/B` 或 `B/C` 边界的各有 $3\times3=9$ 个;同时含 `A、B、C` 的有 $3\times3=9$ 个。共 $9+9+9+9=36$ 个。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 对非负的 `x`,先乘 $100$,加 $0.5$ 后转为整数以完成四舍五入,再除以 `100.0` 恢复数量级,对应选项 C。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 补码 `11111001` 的符号位为 $1$,表示负数;逐位取反再加一,得其绝对值 `00000111`,即 $7$。所以原码为 `10000111`。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 欧几里得算法利用 $\gcd(a,b)=\gcd(b,a\bmod b)$,当 `b==0` 时返回 `a`,计算的是最大公约数。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 将三个盘子中的苹果数按从大到小排列,可得 $(7,0,0)$、$(6,1,0)$、$(5,2,0)$、$(5,1,1)$、$(4,3,0)$、$(4,2,1)$、$(3,3,1)$、$(3,2,2)$,共 $8$ 种。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 各层最多分别有 $1,2,4,\ldots,2^{n-1}$ 个结点,求和得到 $2^n-1$。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 无向完全图中,每两个不同顶点之间恰有一条边,因此边数为 $\binom72=7\times6/2=21$。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 根的高度为 $1$ 时,高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。由于 $32\le61\le63$,所以高度为 $6$。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 元素 $7$ 与后面的 $2,3,5,4$ 形成 $4$ 个逆序对,元素 $5$ 与 $4$ 再形成 $1$ 个,合计 $5$ 个。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 若 `L[k]` 同时大于两侧元素,应直接返回峰顶值,对应 c;若仍处于上升段,应搜索右半部分,对应 a;否则搜索左半部分,对应 b。顺序为 `c、a、b`。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 广度优先搜索按距起点的层次逐层扩展,先发现的结点先被扩展,因此通常使用先进先出的队列。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(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)
|
||||
|
||||
**程序分析:** 当 $k>1$ 时,数组 `d` 模拟 $k$ 进制计数,`len` 为有效位数,`ans` 记录进位次数。因此 $\mathrm{ans}=\sum_{t\ge1}\lfloor n/k^t\rfloor$。当 $k=1$ 时应直接分析程序,此时每轮恰有一次进位,最终 `ans=n`。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | √ | D | B | D |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 当 $k=1$ 时,第一轮使 `len` 变为 $2$,随后不再增加,因此 `len` 并不总等于 $n$。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 取 $n=1,k=2$,最终 `len=1`,并不小于 $n$,即可构成反例。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `len` 是 $n$ 的 $k$ 进制位数,满足 $k^{\mathrm{len}-1}\le n<k^{\mathrm{len}}$,因此该不等式成立。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** $k=1$ 时每次外层循环使 `ans` 加一,执行 $n$ 次后结果为 $n=10^{15}$。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 进位总数为 $3^{29}+3^{28}+\cdots+1=(3^{30}-1)/2$。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 按公式依次累加 $\lfloor n/10\rfloor、\lfloor n/10^2\rfloor$ 等,得到 $11112222444453$,对应 D。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** `a[x]=y` 与 `b[y]=x` 维护两侧结点的一一配对,冲突配对会先解除。最后分别统计两数组中的零元素;若当前有 $t$ 对配对,输出为 $2n-2t$。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | × | × | × | A | A |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 第一对正编号结点必定可以配对,之后的更新不会使配对总数降为零,因此 $m>0$ 时最终至少有一对,输出小于 $2n$。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 最终答案为偶数,但某一次执行 `++ans` 后的中间值可以是奇数。例如仅配对 `(1,2)` 时,扫描 `i=1` 就可能使 `ans` 变为 $1$。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如输入配对 `(1,2)`、`(3,1)` 后,`a[1]=2`、`b[1]=3`,二者可以同时大于零。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如先后输入 `(1,2)`、`(1,3)`,每次均有 `x<y`,但第二次仍须解除旧配对,因此相应语句会执行。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 两侧编号分别互不相同时,所有 $m$ 对都能保留,零元素总数为 $2(n-m)=2n-2m$。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 所有 `y` 相同时,最终只能保留其中一对配对,故零元素总数为 $2n-2$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序输出 2015 年指定月份的月历。`offset` 表示当月第一天相对星期日的偏移,先按此前月份天数逐月更新,再按每七天换行。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 34 | `offset = 4` |
|
||||
| 35 | `(offset + dayNum[i]) % 7` |
|
||||
| 36 | `dayNum[m]` |
|
||||
| 37 | `i` |
|
||||
| 38 | `(offset + i) % 7` |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `offset = 4`
|
||||
|
||||
**解析:** 2015 年 1 月 1 日为星期四;以星期日为 $0$,初始偏移为 $4$。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `(offset + dayNum[i]) % 7`
|
||||
|
||||
**解析:** 跨过第 `i` 个月后,偏移增加该月天数并对 $7$ 取模,即 `(offset+dayNum[i])%7`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `dayNum[m]`
|
||||
|
||||
**解析:** 应依次输出指定月份的全部日期,因此上界为 `dayNum[m]`。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `i`
|
||||
|
||||
**解析:** 循环变量 `i` 就是当前日期,直接输出 `i`。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `(offset + i) % 7`
|
||||
|
||||
**解析:** 当 `offset+i` 恰为 $7$ 的倍数时已输出到星期六,应换行,因此判断 `(offset+i)%7` 是否为零。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 递归把一个 $2^n\times2^n$ 的矩阵分成四个子矩阵,左上、右上、左下保持当前值 `t`,右下取反。到单个元素时写入 `t`。初始元素为 $0$。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 39 | 40 | 41 | 42 | 43 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | D | B | B | B |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** C(`t`)
|
||||
|
||||
**解析:** `n==0` 时对应单个元素,其值就是参数 `t`。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** D(`x, y`)
|
||||
|
||||
**解析:** 左上子矩阵的左上角不变,应继续使用坐标 `x,y`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** B(`x + step, y + step`)
|
||||
|
||||
**解析:** 右下子矩阵的行、列起点都需加上 `step`,并由已有参数 `!t` 实现取反。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** B(`n, 0`)
|
||||
|
||||
**解析:** 初始调用需递归 $n$ 层,且原始元素为 $0$,因此传入 `n,0`。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** B(`1<<n`)
|
||||
|
||||
**解析:** 变换 $n$ 次后的边长为 $2^n$,对应位移表达式 `1<<n`。
|
||||
@@ -0,0 +1,325 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 15 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | A | A | A | B | B | A | B |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | D | B | A | B | C | A | D |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 图灵奖是计算机科学领域的重要奖项;其余奖项分别主要面向电影、自然科学及文学等领域、新闻等领域。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 早期电子计算机首先用于科学与工程中的数值计算,例如数值表和复杂算式的计算。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 各层最多分别有 $1,2,4,\ldots,2^{n-1}$ 个结点,求和得到 $2^n-1$。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 删除边 `a` 后,剩余有向路径仍使任意两个顶点互相可达,图仍满足强连通定义,因此选 A。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** `a` 初始为 $1$,每轮减 $2$。执行两轮后 `s=2`、`a=-3`;要使循环此时结束,应输入 `n=-3`。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 元素 $7$ 与后面的 $2,3,5,4$ 形成 $4$ 个逆序对,元素 $5$ 与 $4$ 再形成 $1$ 个,合计 $5$ 个。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 字符串是由字符组成的特殊线性表,可以用数组存储;长度可以为零。含空格字符的串仍含有元素,不是空串。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $10000=2^4\times5^4$。在 $1$ 至 $10000$ 中,去掉能被 $2$ 或 $5$ 整除的数,并加回被重复扣除的 $10$ 的倍数,得到 $10000-5000-2000+1000=4000$ 个。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 前序顺序为“根、左、右”,中序顺序为“左、根、右”。要使两者相同,每个结点都不能有左子树;因此只含根结点或仅沿右孩子延伸的二叉树符合条件。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 全集的子集总数为 $S=2^{10}=1024$,含 $7$ 个元素的子集数为 $T=\binom{10}7=120$,因此 $T/S=120/1024=15/128$。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 不能分享给 Jacob 或他的朋友,否则 Jacob 可能通过评论看到照片。Dana、Michael、Eve 均符合条件,对应 A。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** `x & (x-1)` 每次恰好清除二进制表示中最右侧的一个 `1`。循环次数因此等于 `1` 的个数,所填语句为 `x &= x - 1`。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 方案二每公里消耗更多,但每周最多安排 $3$ 次。安排 $3$ 次方案二、$2$ 次方案一,共跑 $3\times5+2\times3=21$ 公里,消耗 $3\times600+2\times300=2400$ 千卡,满足时间与里程限制。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 含 $n$ 个顶点的连通无向图至少有 $n-1$ 条边;取一棵生成树即可达到这个最小值。因此 $10$ 个顶点可用 $9$ 条边构成连通图。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** Linux 可执行文件没有统一的默认扩展名;能否执行主要由文件格式及执行权限决定,因此前三项均不符合。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(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)
|
||||
|
||||
**程序分析:** 程序将 Base64 字符映射为 6 位整数,再将每四个编码字符组合为至多三个原始字节。`ans` 是全局字符数组,输出时按以零结尾的 C 字符串处理。题目规定 `char` 为有符号的 8 位类型。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | √ | B | B | C |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 限定的字符集合是 Base64 编码的输入字符集;解码结果可以包含空格等其他字符,因此该断言错误。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 例如 `YQ==` 解码为 `a`,`YQA=` 解码为 `a` 后跟零字节。用 `%s` 输出时都会在零字节处结束,第二行同为 `a`。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** `table[0]` 被初始化为全一位模式 `0xff`,在题目规定的有符号 8 位 `char` 中表示 $-1$,转为 `int` 后仍为 $-1$。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 循环每次处理 $4$ 个输入字符,每轮只进行常数次运算,总时间复杂度为 $O(n)$。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 将 `Y3Nx` 按 Base64 解码,依次得到字符 `c、s、q`,所以输出 `csq`。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 该字符串解码为 `ccf 2021`,其中 `ccf` 与年份之间有一个空格,不能省略。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 程序从指定格子出发,按马的八种走法回溯。移动前同时检查是否在棋盘内、是否访问过;`tot` 记录已移动的步数,访问满整个棋盘时增加方案数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | B | D | A | D |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** C(`x>=0 && y>=0 && x<r && y<c`)
|
||||
|
||||
**解析:** 合法下标应同时满足 `x>=0 && y>=0 && x<r && y<c`,四个条件缺一不可。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** B(`check(x+wayr[i], y+wayc[i])`)
|
||||
|
||||
**解析:** 应检查移动后的目标位置,因此调用 `check(x+wayr[i],y+wayc[i])`。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** D(`!mark[x+wayr[i]][y+wayc[i]]`)
|
||||
|
||||
**解析:** 目标格不能已被访问,故还需判断 `!mark[x+wayr[i]][y+wayc[i]]`。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** A(`tot==r * c-1`)
|
||||
|
||||
**解析:** 起点已占一个格子,走满 $r\times c$ 个格子需再移动 $r*c-1$ 步,因此条件为 `tot==r*c-1`。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** D(`x+wayr[i], y+wayc[i]`)
|
||||
|
||||
**解析:** 下一层递归的坐标应是当前坐标加上本次移动向量,即 `x+wayr[i],y+wayc[i]`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序枚举大矩阵中所有可容纳小矩阵的左上角,逐元素比较是否完全相同,输出全部匹配位置;`haveAns` 记录是否存在至少一个匹配。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 33 | `cin >> b[i][j]` |
|
||||
| 34 | `m1-m2+1` |
|
||||
| 35 | `good = true` |
|
||||
| 36 | `m2` |
|
||||
| 37 | `haveAns = true` |
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** `cin >> b[i][j]`
|
||||
|
||||
**解析:** 读入第二个矩阵时,应把数据存入 `b[i][j]`。
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `m1-m2+1`
|
||||
|
||||
**解析:** 小矩阵宽为 `m2`,放置的最后一列起点为 `m1-m2+1`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `good = true`
|
||||
|
||||
**解析:** 开始检查新的位置时,先假定匹配,令 `good=true`,发现不等元素后再改为假。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `m2`
|
||||
|
||||
**解析:** 内层比较应遍历小矩阵全部 `m2` 列,因此上界为 `m2`。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `haveAns = true`
|
||||
|
||||
**解析:** 发现一个匹配后,需令 `haveAns=true`,以避免最后误输出不存在答案。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** 程序扫描原字符串,把所有非数字字符依次复制到前面,用 `j` 记录保留字符数,最后只输出这 `j` 个字符,从而删除全部数字。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 38 | `\|\|` |
|
||||
| 39 | `j++` |
|
||||
| 40 | `j` |
|
||||
| 41 | `s[i]` |
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `||`
|
||||
|
||||
**解析:** 不属于数字的条件是小于字符 `0` 或大于字符 `9`,应使用逻辑或运算符 `||`。
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** `j++`
|
||||
|
||||
**解析:** 写入一个保留字符后,下一个写入位置需向后移动,执行 `j++`。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** `j`
|
||||
|
||||
**解析:** `j` 就是删除数字后保留下来的字符数,应作为函数返回值。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** `s[i]`
|
||||
|
||||
**解析:** 保留字符已经依次存入 `s[0..len-1]`,输出时逐个访问 `s[i]`。
|
||||
@@ -0,0 +1,338 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 16 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | D | D | B | A | A | B | C |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | B | A | C | C | C | C |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** PENTIUM(奔腾)、酷睿和赛扬均为 CPU 的产品系列或型号名称。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 按题目采用的 $1024$ 进位约定,$1\ \mathrm{TB}=1024^4\ \mathrm{B}=2^{40}\ \mathrm{B}$。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 先将 `d` 入栈再出栈,然后依次压入 `a、b、c`,即可使栈内从底到顶为 `a、b、c`,因此 D 可行。其余选项不能在保留这三个元素的同时得到所要求的栈内顺序。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 将三进制数按位权展开,可得 $3Z=6X+2Y$。结合数字范围及首位不为零,得到 $X=1,Y=0,Z=2$。于是 $(10)_3\times(21)_3=(210)_3$,对应 `ZXY`。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** $5$ 层满二叉树的结点数为 $1+2+4+8+16=2^5-1=31$。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 先判断中间位置是否为峰顶,成立则执行 c 返回;若中间位置处于上升段,则执行 a 搜索右侧;否则执行 b 搜索左侧。顺序为 `c、a、b`。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 后缀表达式先写操作数,再写对应运算符。`b+c` 转为 `bc+`,随后与 `a`、`d` 相乘,得到 `abc+*d*`。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 先合并权值 $300$ 和 $400$,得到新结点 $700$。按同权时优先选择合并结点的规则,再合并 $600$ 和这个新结点,最后与原权值 $700$ 合并。“也”所在叶结点的深度为 $3$,编码长度为 $3$。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 由后序遍历末尾确定根 `A`,再借助中序遍历递归划分左右子树,得到前序遍历 `ABDEGHJCFI`。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** `s` 从 `a` 开始,循环执行 `c` 次加一操作,因此最终为 `s=a+c`。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** $A_1$ 的未访问邻接点为 $A_3$,深度优先搜索不能在访问 $A_1$ 后跳过 $A_3$ 而先访问 $A_2$,因此 A 不可能。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 顺序存储且根下标为 $1$ 时,下标为 $i$ 的结点的左右孩子下标分别为 $2i$、$2i+1$。因此下标为 $k$ 的结点,其父结点下标为 $\lfloor k/2\rfloor$。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 洗、切、炒可以对不同的菜进行流水作业。第一道菜需 $30$ 分钟,之后每隔 $10$ 分钟完成一道,三道菜共需 $50$ 分钟。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 有向图中,指向该顶点的边数为入度,从该顶点出发的边数为出度,顶点的度定义为二者之和。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $1949\bmod10=9$,对应天干“己”;$1949\bmod12=5$,对应地支“丑”,因此为己丑年。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 利用恒等式 $u+v-(u\mathbin{\&}v)=u\mathbin{|}v$,程序在所有数值不相同的元素对中寻找最大的按位或值;若不存在这样的元素对,保留初值 $-1$。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | √ | √ | C | C |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 数组合法下标为 $0$ 至 $999$,因此输入 $n=1000$ 时仍不会越界;不是必须严格小于 $1000$。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 若所有输入值都相同,条件始终不成立,`ans` 保持为 $-1$,所以输出不一定非负。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 例如序列 `2,1`,原循环会处理“较小值在后、较大值在前”的有序对;限制 `j=i+1` 会漏掉该比较,输出可能改变。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 按位或具有交换性。把严格小于改为不等于只会同时处理反向的一对,不会改变最大值。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 若出现 $128$,只要与某个不同值配对,其按位或的结果就至少为 $128$;若全部为 $128$ 则输出为 $-1$。两种情况都不可能得到 $127$。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 按位或结果为偶数,说明参与得到该结果的两个数最低位均为零,因此输入中至少有两个偶数。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 每个区间取最小元素为根,递归处理左右区间,最终计算各结点深度与对应 `b` 值的乘积之和,可视为在最小笛卡尔树上求加权深度和。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 22 | 23 | 24 | 25 | 26 | 27 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | A | D | D | B |
|
||||
|
||||
###### 第22题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 即使最小值重复,程序也会选择扫描到的第一个最小值作为分界点,左右递归区间仍严格缩小,因此重复本身不会导致错误。
|
||||
|
||||
###### 第23题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 每个结点的贡献都是 `depth*b[mink]`,当所有 `b` 均为零时,输出必为零。
|
||||
|
||||
###### 第24题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 最坏情况下每次最小值都位于端点,扫描次数为 $100+99+\cdots+1=5050$,最接近 $5000$。
|
||||
|
||||
###### 第25题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 最好情况下形成尽量平衡的树。$100$ 个结点的最小深度和为 $580$,相应扫描总次数也为 $580$,最接近 $600$。
|
||||
|
||||
###### 第26题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 将权值 $1$ 至 $10$ 依次安排在深度 $1$ 至 $10$ 的链上,可得到最大加权深度和 $1^2+2^2+\cdots+10^2=385$。
|
||||
|
||||
###### 第27题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 按层尽量填满的树使总深度最小,得到 $1\times1+2\times2+3\times4+4\times8+5\times16+6\times32+7\times37=580$。
|
||||
|
||||
##### 程序(3)
|
||||
|
||||
**程序分析:** `A[i][j]` 由杨辉三角递推得到组合数 $\binom ij$ 对 `MOD` 取模的值;`sum` 为该数组的二维前缀和,同样对 `MOD` 取模。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | × | √ | C | C |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 对角线元素为 $A[i][i]=\binom ii=1$,并不是零。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 该递推计算的是组合数而非排列数,且保存的是组合数对 `MOD` 取模后的值。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 前缀和取模后可能从较大的值回绕到较小值,因此不能保证所述单调关系。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 在取模前额外加一个 `MOD`,不会改变对 `MOD` 取模后的余数。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 前 $10$ 行的最大组合数为 $\binom{10}5=252$,这些值均小于模数,因此无需考虑取模改变数值。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 查询为 `sum[5][3]`,即将前 $5$ 行、前 $3$ 列的组合数求和,结果为 $1+3+7+14+25=50$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** 函数跳过非数字字符,单独记录负号,然后逐位将十进制字符转换为整数;返回前按符号取正或取负。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 34 | `cin.get()` |
|
||||
| 35 | `num = c - '0'` |
|
||||
| 36 | `c >= '0' && c <= '9'` |
|
||||
| 37 | `num = num * 10 + c - '0'` |
|
||||
| 38 | `num = -num` |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** `cin.get()`
|
||||
|
||||
**解析:** 尚未遇到数字或负号时,应继续读取下一个字符,调用 `cin.get()`。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** `num = c - '0'`
|
||||
|
||||
**解析:** 若第一个有效字符不是负号,它就是首位数字,应先令 `num=c-'0'`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** `c >= '0' && c <= '9'`
|
||||
|
||||
**解析:** 后续只要字符仍在 `0` 至 `9` 的范围内,就继续处理,条件为 `c>='0' && c<='9'`。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** `num = num * 10 + c - '0'`
|
||||
|
||||
**解析:** 原数乘 $10$ 后加上新的一位,执行 `num=num*10+c-'0'`。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** `num = -num`
|
||||
|
||||
**解析:** 若出现负号,返回前执行 `num=-num`。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序在整数值域中二分中位数。对于候选 `mid`,统计严格大于它的元素个数;若多于半数,则中位数更大,否则中位数不超过当前值。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 答案 |
|
||||
| :---: | :--- |
|
||||
| 39 | `rbound > lbound` |
|
||||
| 40 | `count = 0` |
|
||||
| 41 | `x[i] > mid` |
|
||||
| 42 | `count++` |
|
||||
| 43 | `rbound = mid` |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** `rbound > lbound`
|
||||
|
||||
**解析:** 当左右边界尚未重合时继续二分,条件为 `rbound>lbound`。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** `count = 0`
|
||||
|
||||
**解析:** 每次更换候选值后,应重新统计,令 `count=0`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** `x[i] > mid`
|
||||
|
||||
**解析:** 应统计严格大于 `mid` 的数,即 `x[i]>mid`。若用 `>=`,例如序列 `1,2,3` 会错误地把答案推到 $3$。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** `count++`
|
||||
|
||||
**解析:** 每发现一个满足条件的元素,就使计数加一,执行 `count++`。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** `rbound = mid`
|
||||
|
||||
**解析:** 严格大于 `mid` 的元素不超过一半时,中位数至多为 `mid`,应执行 `rbound=mid`。
|
||||
@@ -0,0 +1,330 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 17 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | A | B | C | B | A | C | A | B |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | B | D | B | A | C | D |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** $114$ 的 8 位二进制为 `01110010`。逐位取反得到 `10001101`,再加一得到 $-114$ 的补码 `10001110`。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** Gitee 是代码托管与协作平台,不是题目所描述的在线算法判题系统;其余三个网站均提供在线判题功能。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 按题目的字母编号规则,`B=2`、`Y=25`、`T=20`,因此 `BYT` 对应 $2\times26^2+25\times26+20=2022$。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 每个像素占 $24/8=3$ 字节,总空间为 $4096\times2160\times3=26542080$ 字节,约为 $25.31\ \mathrm{MB}$,最接近 $25\ \mathrm{MB}$。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 快速选择利用划分操作,仅继续处理包含第 $k$ 大元素的那一侧,平均时间复杂度为 $O(n)$;比较所有元素本身也需要线性级别的时间。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** ②是树的唯一路径性质,③可由树至少存在叶结点得到。①还需要连通等条件,仅有顶点数和边数不足以保证为树;④与树无环的性质矛盾。因此正确的是②③。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 最小总代价与哈夫曼合并代价相同。依次合并 $5+10=15$、$13+14=27$、$15+27=42$,总代价为 $15+27+42=84$。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 由两种遍历还原二叉树后,根 `H` 的右孩子为 `D`,`D` 的左孩子为 `A`,`A` 的左右孩子为 `F、E`。其下标依次为 $1,3,6,12,13$,因此最大下标为 $13$。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 代入 `a=1,b=0,c=1`,A、B 的值均为 $0$,D 的值为 $2$。C 中 `!c` 为 $0$,内层逻辑与为 $0$,再取逻辑非得到 $1$。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 最理想情况下,每次要找的元素都位于链表表头,只需访问一个已有结点。因此 $k$ 次操作至少访问 $k$ 次已有结点。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 按 C 班派出人数 $0,1,2,3$ 分类,满足 A 班至多 $5$ 人、B 班至多 $4$ 人及总人数为 $6$ 的方案数依次为 $4,5,5,4$,合计 $18$ 种。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 直接插入排序在一般及最坏情况下需要逐个移动、比较前面的元素,总次数可达到 $1+2+\cdots+(n-1)$,时间复杂度为 $O(n^2)$。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** `rand()%(b-a)` 的取值范围为 $0$ 至 $b-a-1$,再加上 `a`,即得到 $a$ 至 $b-1$,符合左闭右开的区间 $[a,b)$。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** $7$ 个顶点的完全图有 $\binom72=21$ 条边。森林至多保留 $7-1=6$ 条边,因此至少删去 $21-6=15$ 条边,保留一棵生成树即可达到。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 2020 年举办的是第 $37$ 届全国青少年信息学奥林匹克竞赛,举办地为湖南长沙,对应 D。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(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)
|
||||
|
||||
**程序分析:** 程序先用 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)
|
||||
|
||||
**程序分析:** `A[i][j]` 由杨辉三角递推得到组合数 $\binom ij$ 对 `MOD` 取模的值;`sum` 为该数组的二维前缀和,同样对 `MOD` 取模。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 28 | 29 | 30 | 31 | 32 | 33 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | × | × | √ | C | C |
|
||||
|
||||
###### 第28题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 对角线元素为 $A[i][i]=\binom ii=1$,并不是零。
|
||||
|
||||
###### 第29题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 该递推计算的是组合数而非排列数,且保存的是组合数对 `MOD` 取模后的值。
|
||||
|
||||
###### 第30题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 前缀和取模后可能从较大的值回绕到较小值,因此不能保证所述单调关系。
|
||||
|
||||
###### 第31题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 在取模前额外加一个 `MOD`,不会改变对 `MOD` 取模后的余数。
|
||||
|
||||
###### 第32题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 前 $10$ 行的最大组合数为 $\binom{10}5=252$,这些值均小于模数,因此无需考虑取模改变数值。
|
||||
|
||||
###### 第33题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 查询为 `sum[5][3]`,即将前 $5$ 行、前 $3$ 列的组合数求和,结果为 $1+3+7+14+25=50$。
|
||||
|
||||
#### **三、完善程序**
|
||||
|
||||
##### 程序(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)
|
||||
|
||||
**程序分析:** 程序从后向前枚举保留的后缀,维护后缀总分与最低分,删除最低分后计算平均分,记录达到最大平均分的前缀删除长度。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 39 | 40 | 41 | 42 | 43 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | B | D | C | B |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** C(`sum=s[n]`)
|
||||
|
||||
**解析:** 开始枚举前,后缀只有最后一项,应令 `sum=s[n]`。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** B(`sum+=s[i]`)
|
||||
|
||||
**解析:** 将第 `i` 项纳入当前后缀后,需要执行 `sum+=s[i]`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** D(`(double)(sum-minScore)/(n-i)`)
|
||||
|
||||
**解析:** 后缀含 $n-i+1$ 项,去掉最低分后剩 $n-i$ 项,平均分为 `(double)(sum-minScore)/(n-i)`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** C(`cnt=1;k[cnt]=i-1;`)
|
||||
|
||||
**解析:** 发现更优平均分时,应清空此前候选,把当前删除的前缀长度 `i-1` 作为首个结果保存。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** B(`k[++cnt]=i-1;`)
|
||||
|
||||
**解析:** 平均分相同时追加当前答案,执行 `k[++cnt]=i-1`,保留所有达到最优值的删除长度。
|
||||
@@ -0,0 +1,330 @@
|
||||
<center><font size="6"><b>CSP-J 初赛模拟卷(第 18 套)</b></font></center>
|
||||
<center><font size="4"><b>参考答案与解析</b></font></center>
|
||||
|
||||
---
|
||||
|
||||
#### **一、单项选择题**
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | C | B | C | B | D | B | A |
|
||||
|
||||
| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | D | B | C | C | C | A |
|
||||
|
||||
**逐题解析**
|
||||
|
||||
##### 第1题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 按位权展开,$(24)_x=2x+4=18$,解得 $x=7$,且各位数字均小于进制基数 $7$。
|
||||
|
||||
##### 第2题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 域名中的 `gov` 表示政府机构,`.cn` 表示中国的国家顶级域名,因此该网站属于政府机构网站。
|
||||
|
||||
##### 第3题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 操作系统直接负责处理器调度、内存管理和设备管理等工作,与计算机硬件的联系最密切。
|
||||
|
||||
##### 第4题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 第一次判断 `while(i++)` 时先使用旧值 $1$,随后 `i=2`,执行 `s+=2`;第二次判断后 `i=3`,满足 `i%3==0` 而退出,最终 `s=2`。
|
||||
|
||||
##### 第5题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 满足条件的无序组合为 $(2,8,9)$、$(3,7,9)$、$(4,6,9)$、$(4,7,8)$、$(5,6,8)$,共 $5$ 种。
|
||||
|
||||
##### 第6题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 三人的选课方案相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。
|
||||
|
||||
##### 第7题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 根为 `A`;其左子树由 `B、D` 构成,后序为 `DB`;右子树由 `C、E` 构成,后序为 `EC`。合并得到 `DBECA`。
|
||||
|
||||
##### 第8题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 引导固件需要在断电后仍能保存,通常存放在 ROM 或具有相应非易失特性的存储器中,本题选择 ROM。
|
||||
|
||||
##### 第9题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 表达式的最外层运算是减法,左操作数为 `a+b*c`,右操作数为 `d+e`。分别转为前缀形式后,得到 `-+a*bc+de`。
|
||||
|
||||
##### 第10题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 灯的状态每 $6$ 次按键循环一次。$49\bmod6=1$,对应白灯亮;$100\bmod6=4$,对应灯灭。
|
||||
|
||||
##### 第11题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** $704=2^6\times11$,$2048=2^{11}$,因此最小公倍数为 $2^{11}\times11=22528$。
|
||||
|
||||
##### 第12题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 逻辑或仅在两个操作数都为 $0$ 时结果为 $0$;只要有一个为 $1$,结果就为 $1$。
|
||||
|
||||
##### 第13题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 代入 C,可得到三组队友分别为“小明与小红”“小刚与琳达”“小伟与小丽”,每组都不是夫妻,且满足小刚与小伟的妻子、琳达的丈夫与小丽同组的条件。
|
||||
|
||||
##### 第14题
|
||||
|
||||
**答案:** C
|
||||
|
||||
**解析:** 先让用时 $1$、$2$ 的两人过桥,用时 $1$ 的人返回;再让用时 $5$、$10$ 的两人过桥,用时 $2$ 的人返回;最后前两人一起过桥。总时间为 $2+1+10+2+2=17$ 分钟。
|
||||
|
||||
##### 第15题
|
||||
|
||||
**答案:** A
|
||||
|
||||
**解析:** 姚期智于 2000 年获得图灵奖,以表彰其在计算理论等领域作出的突出贡献。
|
||||
|
||||
#### **二、阅读程序**
|
||||
|
||||
##### 程序(1)
|
||||
|
||||
**程序分析:** `num[i]` 表示以第 `i` 个元素结尾的最长严格递增子序列长度。程序尝试由前面更小的元素转移,最后取所有 `num[i]` 的最大值。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 16 | 17 | 18 | 19 | 20 | 21 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | × | √ | × | √ | D | B |
|
||||
|
||||
###### 第16题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 算法只比较元素大小,负数同样可以参与比较,不会仅因输入为负数而出错。
|
||||
|
||||
###### 第17题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 长度为 $n$ 的序列,其子序列最多包含 $n$ 个元素,因此 `ans<=n`。
|
||||
|
||||
###### 第18题
|
||||
|
||||
**答案:** ×(错误)
|
||||
|
||||
**解析:** 例如序列 `1,2` 中,初始两项的 `num` 都为 $1$;必须允许相等时更新,才能把第二项改为 $2$。改成严格大于后会漏掉这次转移。
|
||||
|
||||
###### 第19题
|
||||
|
||||
**答案:** √(正确)
|
||||
|
||||
**解析:** 当 `num[i]==ans` 时,无论是否再次赋值,`ans` 的数值都不变,因此修改不影响最大值。
|
||||
|
||||
###### 第20题
|
||||
|
||||
**答案:** D
|
||||
|
||||
**解析:** 所有数相等时,不存在严格递增的相邻选取关系,最长严格递增子序列只能取一个元素,输出 $1$。
|
||||
|
||||
###### 第21题
|
||||
|
||||
**答案:** B
|
||||
|
||||
**解析:** 样例的动态规划长度依次为 $1,1,2,3,4,3,2,4,5,3$,最大值为 $5$;例如可取 `2,5,7,10,15`。
|
||||
|
||||
##### 程序(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 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | √ | √ | 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$ 对应个位;按位相加并向高位进位,最后从最高位向最低位输出。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 34 | 35 | 36 | 37 | 38 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | B | C | A | A | C |
|
||||
|
||||
###### 第34题
|
||||
|
||||
**答案:** B(`a.num[a.len-i]=c[i]-'0'`)
|
||||
|
||||
**解析:** 字符串第 `i` 个字符对应从低位计数的 `a.len-i` 位,减去字符 `0` 后得到数字值。
|
||||
|
||||
###### 第35题
|
||||
|
||||
**答案:** C(`b.num[b.len-i]=d[i]-'0'`)
|
||||
|
||||
**解析:** 同理,将第二个字符串第 `i` 个字符存入 `b.num[b.len-i]`,并减去字符 `0`。
|
||||
|
||||
###### 第36题
|
||||
|
||||
**答案:** A(`(a.num[i]+b.num[i])`)
|
||||
|
||||
**解析:** 当前位应加上两个加数相同位置的数字,即 `a.num[i]+b.num[i]`,同时保留前一位已经产生的进位。
|
||||
|
||||
###### 第37题
|
||||
|
||||
**答案:** A(`w.num[i]/10`)
|
||||
|
||||
**解析:** 当前位总和除以 $10$ 得到进位值,应把 `w.num[i]/10` 加入下一位。
|
||||
|
||||
###### 第38题
|
||||
|
||||
**答案:** C(`w.num[w.len+1]!=0`)
|
||||
|
||||
**解析:** 若原最高位之后仍有非零进位,即 `w.num[w.len+1]!=0`,结果长度需增加一位。
|
||||
|
||||
##### 程序(2)
|
||||
|
||||
**程序分析:** 程序从指定格子出发,按马的八种走法回溯。移动前同时检查是否在棋盘内、是否访问过;`tot` 记录已移动的步数,访问满整个棋盘时增加方案数。
|
||||
|
||||
**答案速查**
|
||||
|
||||
| 题号 | 39 | 40 | 41 | 42 | 43 |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 答案 | C | B | D | A | D |
|
||||
|
||||
###### 第39题
|
||||
|
||||
**答案:** C(`x>=0 && y>=0 && x<r && y<c`)
|
||||
|
||||
**解析:** 合法下标应同时满足 `x>=0 && y>=0 && x<r && y<c`,四个条件缺一不可。
|
||||
|
||||
###### 第40题
|
||||
|
||||
**答案:** B(`check(x+wayr[i], y+wayc[i])`)
|
||||
|
||||
**解析:** 应检查移动后的目标位置,因此调用 `check(x+wayr[i],y+wayc[i])`。
|
||||
|
||||
###### 第41题
|
||||
|
||||
**答案:** D(`!mark[x+wayr[i]][y+wayc[i]]`)
|
||||
|
||||
**解析:** 目标格不能已被访问,故还需判断 `!mark[x+wayr[i]][y+wayc[i]]`。
|
||||
|
||||
###### 第42题
|
||||
|
||||
**答案:** A(`tot==r * c-1`)
|
||||
|
||||
**解析:** 起点已占一个格子,走满 $r\times c$ 个格子需再移动 $r*c-1$ 步,因此条件为 `tot==r*c-1`。
|
||||
|
||||
###### 第43题
|
||||
|
||||
**答案:** D(`x+wayr[i], y+wayc[i]`)
|
||||
|
||||
**解析:** 下一层递归的坐标应是当前坐标加上本次移动向量,即 `x+wayr[i],y+wayc[i]`。
|
||||
Reference in new issue
Block a user