以下解析由 DeepSeek V4 Pro 基于参考答案生成。


一、基础知识

1. C

  • LAN(局域网)、MAN(城域网)、WAN(广域网)均为常见网络分类。
  • NAN 不属于此标准分类,故选 C。

2. A

  • C++ 源代码常见后缀:.cpp.cc.cxx.c++ 等。
  • .c 通常为 C 语言源文件后缀(虽大多数编译器兼容,但规范上不属于 C++ 专属后缀)。

3. B

  • 信息学竞赛(CCF 系列)自 2021 年起指定使用 C++14 标准,2022 年延续此版本。

4. C

表达式:15 & 26 + ~8 << 2(无符号 8 位运算)

  • 运算符优先级:~ > + > << > &
  • ~8 按位取反(在 8 位下为 11110111₂ = 247
  • 26 + 247 = 273,8 位截断为 273 % 256 = 17
  • 17 << 2 = 680b01000100
  • 15 & 68 = 0b00001111 & 0b01000100 = 0b00000100 = 4

选 C。

5. C

已知:

(¬AB)C=true(\lnot A \land B) \lor C = \text{true} $$(B \land C) \oplus (B \lor C) \oplus \lnot A = \text{true}$$

枚举所有 8 种真值组合,满足两式的为 (A,B,C)=(0,1,1)(A,B,C)=(0,1,1)(1,0,1)(1,0,1),其中 true 的个数均为 2。

6. A

  • 边权和 = (点权×度数)\sum (\text{点权} \times \text{度数}),总度数为 2N22N-2
  • 要边权和最小,应让最小点权 TT 尽可能承担更多度数,其余 N1N-1 个点作为叶子。
  • TT 的度数为 N1N-1,其余点度数为 11,总和为 T(N1)+(ST)=S+(N2)TT(N-1)+(S-T)=S+(N-2)T

7. D

  • 33 个结点的有向图,无重边无自环,允许两结点间有双向边。
  • 共有 3×2=63 \times 2 = 6 条可能的有向边,均可存在。选 D。

8. D

  • nn 个结点的无标号二叉树形态数即 卡特兰数 CnC_n
  • C4=14C_4 = 14

9. A

  • 根为 44,其左子树:22(左 11,右 33);右子树:66(左 55,右 77)。
  • 中序遍历:左 → 根 → 右 → 1,2,3,4,5,6,71,2,3,4,5,6,7

10-12. 块状链表操作复杂度

  • 10. B:查询需先通过顺序表定位到组(可 O(1)O(1)),再在组内链表遍历,组长约 n\sqrt{n},故约访问 n\sqrt{n} 个元素。
  • 11. B:插入定位同查询,需要访问约 n\sqrt{n} 个元素找到位置,插入本身为 O(1)O(1)
  • 12. C:每组冒泡排序共 O(n×(n)2)=O(nn)O(\sqrt{n} \times (\sqrt{n})^2) = O(n\sqrt{n});选择排序需要 O(n)O(n) 次选择,每次从 n\sqrt{n} 个串首比较,也是 O(nn)O(n\sqrt{n}),总复杂度 O(nn)O(n\sqrt{n})

13. B

  • memset 定义在头文件 <cstring>(或 C 风格 <string.h>)中。

14. A

f(25) = 25 * f(12)
f(12) = 12 * f(6)
f(6)  = 6 * f(3)
f(3)  = 3 * f(1) = 3

回溯:3×6=183 \times 6 = 1818×12=21618 \times 12 = 216216×25=5400216 \times 25 = 5400

15. D

  • 二分写法有误:当 lr 相邻时 m = (l+r)>>1 恒等于 l,若 x > ml = m 死循环。
  • x=7 时会死循环导致超时;x=1,3,5 均可正常退出。

二、阅读程序

(六)蜘蛛算经

程序将输入的数字串按“乘 88 加下一位”处理,相当于将输入视为八进制数(但数字可以是 090\sim9),转为十进制输出。

  • 16. Tx <<= 3 等价于 x *= 8(正数且不溢出时)。
  • 17. F:输入 "01""1" 输出相同,并非一定不同。
  • 18. F:输入最多 1010 个数字,最大值为 101099 的结果 13805252011\,380\,525\,201,未超出 int 范围(约 2.1×1092.1\times10^9)。
  • 19. D
    A. "000" 0\to 0,输出 0
    B. "778" 7×8+7=63,63×8+8=512\to 7\times8+7=63, 63\times8+8=512
    C. "123" 1×8+2=10,10×8+3=83\to 1\times8+2=10, 10\times8+3=83
    D. "111" 9×8+1=73\to 9\times8+1=73,正确。
  • 20. C"777" 63×8+7=511\to 63\times8+7=511
  • 21. D101099 的结果为 $9\times(8^{10}-1)/7 \approx 1.38\times10^9 \approx 13.8$ 亿,最接近 1414 亿。

(七)左手螺旋

模拟在 01 矩阵中按“左手扶墙”规则行走,超过 10nm10nm 步未停则输出 -1

  • 22. F:循环条件为 ans <= 10*n*m,跳出时 ans = 10*n*m + 1
  • 23. T:将条件改为 ==0 后可走,在边界外可能持续走出数组导致越界。
  • 24. T:矩阵全 00 时,起点一定为 00,直接 report(0)
  • 25. A:手推几步会发现路径进入死循环,最终超过步数上限输出 -1
  • 26. A:全 11 矩阵中,起点 (1,1)(1,1)。若方向为 U,前方和左方均为界外(00),第一步即停下输出 1;其他方向均可前进。
  • 27. D:循环最多执行至 ans = 10nm+1n,mn,m 最大 10001000,故约 10710^7 次。

(八)幸福之约

用 DFS 枚举连续质数的幂次,求不超过 range 且约数个数最大的数。

  • 28. T:删去第 66 行后 prime(1) 返回 true,但 set_pr22 开始循环,不影响质数表。
  • 29. Trange=1,DFS 无法乘任何质数,最大约数个数 mv 保持为 1
  • 30. T:改用 int 可能导致 cur 溢出变为负数,递归无法按预期终止,造成超时等。
  • 31. B:DFS 从 cur=1 开始,且必须从小到大连续取质数、每个至少取一次,故在 1101\sim10 间可能值为 1,2,4,6,81, 2, 4, 6, 8(共 55 个)。3,5,7,9,103,5,7,9,10 不含因子 22 或因缺少中间质数而无法产生。
  • 32. B:取指数均为 11 的路径 $2 \times 3 \times 5 \times 7 \times 11 \times 13 \times 17 \times 19 \times 23=223\,092\,870<10^9$,进入 dep=10 时乘 2929 溢出返回,故 dep 最大值为 1010
  • 33. C:输入 10910^9 时经典最大约数个数为 13441344(对应 735134400735\,134\,400),程序能正确求出。

三、补全程序

(九)方格计数

高精度乘法 n×mn \times m,采用压位存储(每位存 ZZ 进制)。

  • 34. B:数字最大长度 10100010^{1000},故数组大小需 >1000>10001<<10=1024=1024 足够且优化空间。a,b 长度 XX1<<10
  • 35. Dc 数组存乘积结果,长度为两数长度之和,1<<11=2048=2048 足够容纳约 20002000 位。
  • 36. D:压位进制 ZZ1010 可简化 += c[i]/Z%=Z 的进位处理,且 c[i] 单个数字最大 9×9×1000<1059\times9\times1000<10^5,无溢出风险。
  • 37. A:竖式乘法中,a[i] * b[j] 累加至 c[i+j]
  • 38. C:进位处理时,c[i]/Z 进位到下一位 c[i+1]

(十)晚餐时间

nn 只猪在数轴上按规则移动,每步同时朝猪少的一侧移动,两端猪跳下。程序利用间距 dis 优化模拟。

  • 39. Cdis[i] 为第 ii 只与第 i+1i+1 只的距离,即 a[i+1] - a[i]
  • 40. D:当前仍在桥上的猪的数量 cnt = r - l + 1
  • 41. B:若 cnt <= 1,只剩一只猪无法下桥,移动停止。
  • 42. A:中间猪的索引 mid = (l + r) >> 1(向下取整)。
  • 43. B:当桥上有偶数只猪时,中间两只同时向中间移动会消耗两倍距离,move 需翻倍,即 dis[mid] += move << 1