logo AlgoBeat OnlineJudge
登录 注册

[Sleeping Cup #6] 2025 Sleeping Cup CSP-J1/S1 Mock Test 题解

作者: charly666  ·  发布于 2026-06-19 22:41:40  ·  最后修改于 2026-06-22 0:20:43
已通过
审核员:AlgoBeat 官方账号 · 2026-06-22 0:20:43

本题解由人工生成,由 Deepseek 扩写。

感谢 @035966_L3 指出了题解的问题,现已修改。

解析

  1. NAN 不是标准网络分类术语。
  2. .c 是 C 语言源文件的标准扩展名,不是 C++ 源文件。
  3. 年 CCF 系列比赛使用的 C++ 标准为 C++14。
  4. 按位非 得到 (补码表示),
  5. 标准答案。
  6. 树有 条边,每条边的边权为其两端点权之和。要使边权和最小,应让点权最小的点度数尽可能大。构造星形图,最小点权点与其余所有点相连,其度数为 ,其余点度数均为 。边权和
  7. 有向图中,任意两个不同点之间可以存在两条方向相反的有向边,但不能有重边和自环。从 个点中选 个点有 种选法,每种选法对应 条有向边,总数
  8. 这是卡特兰数的经典应用。 个节点的无标号二叉树的数量是第 个卡特兰数
  9. 根据题目给出的二叉树结构表格(结点 ,结点 ,结点 ),中序遍历顺序为左子树 右子树,遍历得到 ,即 4261357
  10. 块状链表将 个数据分成约 组,每组用链表存储约 个元素。查询指定位置时,先遍历顺序表定位到目标块(约 次),再在块内链表遍历到目标位置(约 次),总计约 次。
  11. 插入元素到指定位置后面,同样需要先定位到目标块(约 次),再在块内找到指定位置(约 次),总访问量约 次。
  12. 每组内部冒泡排序:每组约 个元素,共 组,复杂度为 。组间选择排序:每次从 个组首元素中选出最小者,共需选择 次,复杂度为 。总计约 次基本运算。
  13. memset 函数定义在 <cstring> 头文件中。
  14. 递归函数 :由于 ,返回 返回 返回 。故
  15. 标准答案。
  16. x <<= 3 的二进制位左移 位,低位补 ,等价于乘以 。改为 x *= 8 后对任意输入计算结果完全相同。
  17. 输入字符串 "0" 时, 初始为 ,读入字符 '0',输出 。输入 "000" 时,连续读入三个 '0',每次 ,最终输出仍为 。因此不同输入可以产生相同输出。
  18. 标准答案。
  19. 程序将输入的数字字符序列视为八进制数并转换为十进制。选项 A 中 ,错误;选项 B 中输入 778 含有非八进制数字 8,程序行为未定义,错误;选项 C 中 ,错误;选项 D 中 ,正确。
  20. '9' 组成的八进制数等于 ,减 ,乘以 ,除以 ,约为 亿。
  21. 标准答案。
  22. 行和第 行分别检查当前方向前方和左前方位置的数组值。若边界外原本为 ,将对应位置的 改为 后,程序可能判定边界外格子可走并移动出去,导致数组下标越界。
  23. 矩阵全为 时,第 if(!a[x][y]) report(0) 条件成立,直接调用 report(0) 输出 并终止程序。
  24. 按左手螺旋规则模拟:始终优先向左转,若左前方可走则左转前进,否则直行,若前方不可走则报告步数。对给定数据模拟得输出
  25. 矩阵全为 时,当前位置和所有相邻位置均为 。每次循环先检查当前方向前方是否为 ,是则前进。输出为 意味着循环执行 次后到达终止条件。起始方向为 U 时满足。
  26. 行 while 循环条件为 ans <= 10*n*m,循环次数直接由矩阵大小 决定,约为 次,即时间复杂度为
  27. if(x==1)return false; 用于排除 的情况。但 prime 函数在程序中只被 set_pr 调用,调用时 开始递增,不会传入 。删除该行不影响程序运行结果。
  28. range=1 时,dfs(1,1,1,30) 中循环 nc=1\times pr[1]=1\times 2=2$,nc>range即 $2>1$ 成立,立即returnmv` 保持初始值 ,输出
  29. long long nc 改为 int nc 后,当 nc 不断乘以质数超过 int 范围(约 )时变为负数,导致 nc>range 判断失效(负数不大于正数),循环无法正常终止,产生死循环或错误结果。
  30. 标准答案。
  31. 标准答案。
  32. 程序求不超过 range 的数中约数个数最多的那个数的约数个数。输入 时,该最大值为
  33. 两个长度不超过 的数相乘,结果位数最多为 。但数组 ab 只存储乘数各位数字,长度与乘数相同即可,因此开 足够。
  34. 数组 c 存储乘积的中间累加结果,需要能容纳两个 位数相乘的所有位,最大位数为 ,选
  35. 程序按十进制进行进位处理,因此
  36. 大数乘法中,a[i] 表示 的第 位,b[j] 表示 的第 位,乘积的 位应累加 a[i]*b[j]
  37. 进位时,第 位上的值若大于等于 (即 ),应除以 的商加到第 位,余数留在第 位。
  38. dis[i] 表示第 只猪与第 只猪之间的距离,应为 a[i+1]-a[i]
  39. 变量 cnt 表示当前区间内的猪的数量。若 lr 分别为左右端点在数组中的下标,数量应为 r-l+1
  40. 模拟过程终止的条件是桥上只剩 只猪,此时该猪不再移动。cnt 表示当前桥上存活猪的数量,当 cnt <= 1 时跳出 while 循环,因此空 41 应填
  41. mid 用于标记当前区间 [l, r] 的中间位置,便于处理左右两侧猪的相遇问题。标准写法为 ,即 (l+r)>>1
  42. cnt 为偶数时,中间存在两个相邻的间隔,左右两侧的猪会同时向中间移动,这两个间隔各自减少 move 的距离,总共减少 ,代码中用位运算 move<<1 表示。

暂无评论

登录 后即可评论。