《深入浅出程序设计竞赛 基础篇》勘误
感谢读者阅读本书。因为作者有时候脑抽或者其他原因,本书不可避免出现一些疏漏。我们每次印刷都会尝试修正。如果你读书时遇到了一些困惑,也有可能是书确实写错了。
我们勘误时会记录第一次给提出这个错误的读者的用户名。感谢所有读者的反馈。
进阶篇书稿错误反馈收集:https://shimo.im/sheets/oFycLZIzveopR6BX/MODOC
2025 年 3 月第十三次印刷
严重错误
这类错误存在概念或者事实性错误,可能会对读者产生误导。
中等错误
这类错误因为疏忽而出现,虽然不至于误导读者,但是可能会给读者造成迷惑,一些读者可以意识到写错了。
- P173 习题 12.8,要求是“使得人数最少的组人数最多,输出人数最少的组人数的最大值。”而不是“使得人数最少的组的实力值之和最大,输出人数最少的组实力值之和的最大值。”@x12345678901
- P231-P232 例题 16.7。P231 最后一行的
t[root].num多了一个空格。代码在 C++11 或者更高语言版本下,会因为rank这个函数名撞了头文件库里面的函数名导致 CE;代码无法通过 Hack 数据(Subtask 1),应当在函数kth中判断如果x == 0则返回 -2147483647。 - P275 例题 19-9 中,
\overline{A\overline{B}+\overline{AC}} 计算错误。正确的计算步骤为原式=\overline{A\overline{B}} \cdot \overline{\overline{AC}}=(\overline{A}+B)\cdot(AC)=(\overline{A}\cdot AC)+(B\cdot AC)=0+ABC=ABC @x12345678902
小错误
这类错误包括错别字或者语病、笔误,不影响意思,读者不一定可以意识到这些错误。
- P16 “计算机内存大小是有限的,如果选用这些数据类型,则能够容纳的数字位数就变少了”,位数应当改为个数。@x12345678901
- P20 2.2 变量的输入与输出,第二段“就例2-3的程序而言”应当为“就例1-4的程序而言”。@Miracle640
- P107 分析的第一行,“因为”逻辑不通,应当改成“因此”。@x12345678901
- P124 最后一个分号错误地输入为了全角分号,应当改为半角分号。此外,题号漏了个 P。@panchenglin @Westmelon_233
- P134 插入排序的代码中,else 应当进行代码缩进。@N_O_I_P
- P181 代码第 21 行“如果
p(mid)为真”应为“如果P(mid)为真”,P 的大小写要统一。@Damon34 - P185 习 13-8,提示中月利息最高可高至
500\% 应当改为300\% 。@ForgottenCat - P192 解答树的图中,最左侧和最右侧的两个图并没有完全画到无解状态。@J_WOW_GGB
- P198 图 14-10 的 (b),箭头方向应当为 1->3 而非 3->1。@x12345678901
- P200 习 14-7 的样例输出(涂色后的结果)中,第五行第二个数应当为 2。@chenyiran
- P222 习 15-10,第一个数字的最小波动值应当为第一个数字本身,不带绝对值。@ForgottenCat
- P252/253 不一致。P252 思维导图上是“凡华中学”,而例 18-1 中是“爱华中学”。@x12345678901
- P275 例 19-9 的第四问的答案中,
y\leq 5 应当改为y\leq 10 。@x12345678901 - P277 例 19-11 分析的最后一段,and 应当改为 &,与上文写法相同。@x12345678901
- P259 例 18-4 代码倒数第 5 行,
i>=0改为i>=1出版社读者反馈
2024 年 12 月第十二次印刷
严重错误
这类错误存在概念或者事实性错误,可能会对读者产生误导。
中等错误
这类错误因为疏忽而出现,虽然不至于误导读者,但是可能会给读者造成迷惑,一些读者可以意识到写错了。
- P146 例题 10-3,代码应当特判
A,B,C 中有0 的极端特殊情况。@NewIntMain - P220 习题 15-1,函数应当为
void play(int n)。@M_MXJ - P231 代码中
if (x < t[root].value)的对应注释,应当为“右子树所有数都比 x 大,故进入左子树”。@GMU_MaTao
小错误
这类错误包括错别字或者语病、笔误,不影响意思,读者不一定可以意识到这些错误。
- P39 代码第 13 行,应当为
cout << "Sorry..." << endl;书本参考代码缺少一个.。@duweiming - P49 “当 n=5,输入数据为 5 3 4 2 6”,应当为“输入数据为 5 3 4 2 4”。@Abcountance
- P51 “直到 a 变为 0 的时候,循环成立条件不再成立”,应为“a 变为 1 的时候”。@Fourteen14
- P73 代码中的变量
ans应当初始化为 0。 - P101 代码注释应当为:
枚举 1 到 sqrt(x),来判断 x 是否为质数,缺少了一对括号。@LG_Sam - P117 代码中
cout << w << ":" << l << endl中,书中代码在输出冒号时多印刷了一个空格。@aichuan51396 - P170 合并果子的题面中,数据范围应当为:果子的种类数
n(n\leq 10000) ,每种果子的数目a_i(a_i \leq 20000) 。@Shack8 - P180 定义
int ans, mid;中,无需定义变量mid。@Crsuh2er0 - P194
#define maxn 310应当修改为#define maxn 410。@Shack8 - P205 例题 15-1 分析中第一段,“也就是
2\times 10^6 ” 右侧缺少一个右括号。@_lfggyliangfeng - P211 “在这里,越早写下的括号”这一段,应当在例 15-5 的分析讲解中。@Cryflmind
- P226 最后一段,
如果一个结点除了……应为如果一个二叉树除了……。自己发现 - P226 代码倒数第3行,
value[2] > value[3] ? winner[3] : winner[2]应外加圆括号。@a_mouse - P240 第五行(图 17-4 下方一句),“由于 1 号的负责人变成了 2,所以 1 号的负责人变成了 2。”后半句“1 号的负责人变成了 2”删除。@maxyzfj
- P274 “只有填充 0 和 1 时才能初始化为 0 或 -1”应为“只有填充 0 和 -1 时才能初始化为 0 或 -1”。@XuOuXiao1024
2021 年 7 月第三次印刷 / 2021 年 12 月第四次印刷 / 2022 年 5 月第五次印刷
严重错误
这类错误存在概念或者事实性错误,可能会对读者产生误导。
中等错误
这类错误因为疏忽而出现,虽然不至于误导读者,但是可能会给读者造成迷惑,一些读者可以意识到写错了。
- P37,图 2-5,“x是0或1?”应该为“x不是0且x不是1?”。@littlekayen
- P167,例 12-2,代码第 12 行,sum 变量应该使用 long long 类型。@fufufu0601
- P226,例 16-1,第一段第一行
1>>n应为1<<n。@anantheparty - P299, 推论3第5行,
a的质因子个数,应改为a的因子个数@bowen404
小错误
这类错误包括错别字或者语病、笔误,不影响意思,读者不一定可以意识到这些错误。
- P78,例 5-10,代码第3行注释,
dight应为digit。@冰封侠 - P85页 delta=mmax-mmin 这一行后面缺了
;号 - P107,最下方代码中的注释,
右上方矩阵和下面一行的左下角矩阵对调。@Hack3rD - P161,例 11-6,倒数第二段,
ABF[4RA[2A]B[3C]]应为ABF[2RA[3A]B[2CD]]@@Laofei - P249,代码16行的
de应为ds,倒数第4行改为cout << ds.size() << endl;@Pretharp - P272, d[1] 的值
01100010应为01100001 - P271,倒数第二行
提成应为提升@ynliao - P272,图 19-5,d[1] 的数字应为 01100001 @bowen404
- P275,例 19-8 逻辑运算性质 6) A+A=1 改为 A+非A=1,A·非0=0;例 19-9 分析 4) A=(y=0) 应为 A=(y≤0) @bowen404
- P286,代码下面第一行
改代码计算应为该代码@ynliao - P292,例 21-5 题目第2行,
依次应为依次判断@bowen404 - P295,定义 21-3 第1行,
d,|a_2应为d|a_2@bowen404 - P299,第1行, 第二个
(10, 16)应改为[10, 16]@bowen404 - P290,第一段程序第4行的
i++应当改为k++@Jeremy_Mandel
2020 年 10 月第一次印刷 / 2020 年 11 月第二次印刷
严重错误
这类错误存在概念或者事实性错误,可能会对读者产生误导。
中等错误
这类错误因为疏忽而出现,虽然不至于误导读者,但是可能会给读者造成迷惑,一些读者可以意识到写错了。
- P59,例 4-11,倒数第二段,
就要改成 s+=++i应为就要改成 s+=i++。自己发现 - P95,习题 6-3,
和 3 个 girl应为和 2 个 girl@Fее_cle6418 - P100 运行步骤 2),
变量 x1、y1、x2、y1应为变量 x1、y1、x2、y2;x1=3,y2=0,x2=0,y2=4应为x1=3,y1=0,x2=0,y2=4@Fее_cle6418 - P133,图9-6,第四轮的图中5所对应的牌应当在9对应的牌的的前面。@wzmzmhk
- P138 例 9-6 代码 cmp 函数应为:自己发现
int cmp(student a, student b) { if(a.total != b.total) return a.total > b.total; // 总分先定胜负 if(a.chinese != b.chinese) return a.chinese > b.chinese; // 然后比语文 return a.id < b.id; // 最后比学号 } - P139 例 9-7 代码 6,7 行应为:@Fее_cle6418
if(a.x.length() != b.x.length()) return a.x.length() > b.x.length(); - P248 例 17-6 详见 https://www.luogu.com.cn/paste/fh6n4mz1 @ProjectWTA
- P313 公式第 4 行应为
=\frac{1}{2}[\frac{1}{6}n(n+1)(2n+1)+\frac{1}{2}n(n+1)] 。自己发现
小错误
这类错误包括错别字或者语病、笔误,不影响意思,读者不一定可以意识到这些错误。
- P11,第二段
使用第6行的宏定义的方法改为使用 #define 宏定义的方法 - P11,第四段,
和下画线(_)应为和下划线(_)。@Fее_cle6418 - P13,习题1-2,
(两个下画线)应为(两个下划线)。@Fее_cle6418 - P16,表格2-1,第二行第三列应该是
-128~127,不是~128~127;第六行第三列应该是0~2^{64}-1,不是0~2^{24}-1;@hy1089knigh @Roy_king - P40,例3-7
小于18.5kg应为小于18.5kg·m^{-2},后两点也是这样的。 @吴晗 - P45,例3-12
前面8位等 3 处改为9位@Foryou - P45,例3-12 代码第 13 行
print应为printf。@uniqueharry - P52,例4-5分析第3段
产生一个0到RAND_MAX的函数应改为产生一个0到RAND_MAX的整数@Wu_while - P54 表4-5 外层循环行为并没有用粗体表示。以及,表头的
j<n-i+1?应当为j<=n-i+1?@Fее_cle6418 及 自己发现 - P85,例6-2:分析中
转换为0到26的数字" 应为转换为0到25的数字。@桑塔露琪亚 - P90 例6-7分析第3段,将其变成 "ak" 应为 将其变成 " ak "(前后少了空格)@Fее_cle6418
- P95,小提示蓝框,第三行的
(第6行)应为(第7行)。@raymie - P101,例7-1,
ans()函数应为ans 变量。@Fее_cle6418 - P108,例7-9,代码第2行
#define MAXN 1024应为#include<string>。@eric888 - P154,图11-3 最上面的楼梯应该是f[i]不是f[i-2]。@mamingxiao
- P155,例11-1,代码倒数第二行,
f.print()改为f[N].print()。@hanyy213 - P164,第一段第 2 行,
和经验,平在考场上放平心态应为和经验,在考场上放平心态。自己发现 - P164,第二段第 2 行,
即使目关短浅应为即使目光短浅。 @Fее_cle6418 - P173,习题12-8,
每个小组的顺序必须实力值连续且互不相同应为每个小组中,成员的实力值排序后,必须是连续且互不相同的整数数列。 - P177,第一行,
左闭左开,应为左闭右开。@Fее_cle6418 - P196,例14-5,第三段,
刚好可以使用深度优先搜索应为刚好可以使用广度优先搜索。自己发现 - P201,习题14-8,规则中,
A_1->B_1, A_1->B_1应为A_1->B_1, A_2->B_2。@Laofei - P208,例15-4 代码第 12 和第 18 行
print应为printf。@Laofei - P213,例15-8 最后的 queue 的用法中第 6) 和 7)
s改为q。@wzmzmhk - P237,习题16-8
ASCⅡ应为ASCII。 - P258,例18-3
(Breadth First Search, DFS)应为(Breadth First Search, BFS)。@houpingze - P262,例18-6 第三段
八边形为出度为 0 的点应为六边形为出度为 0 的点@Fее_cle6418 - P264,习题18-6,第二行,
m(n<=10^5)应为m(m<=10^5)。@Fее_cle6418 - P285,前面的程序的第 5 行 的输入好像少了个分号,也就是
cin >> n >> m;@洪荒少女_Autumn - P290,例21-3 的题目名称应为
找循环节而不是找寻环节@Fее_cle6418 - P308,第2行
errer应该为error@钱柯滨 - P312,例B-1 在洛谷题库中编号为 P5745 而不是 P5475 @Fее_cle6418
你谷人均列文虎克!