一个解法三个问题

数组 {10, 20, 15, 5}(总和 50)。三个看起来不一样的问题:能不能平分、能不能分成相差 10 的两堆、有没有子集和正好是 7。三个都归约到同一个 subset_sum。输出如 能/能/不能。 (本题用 g++ -std=c+

开始练习 →

设计加证明该包含什么

第 1 步:一份交付要四类依据 第 2 步:先对拍:快速证伪 第 3 步:再验:每轮都成立 第 4 步:出循环能推出结论 第 5 步:最后数操作次数 第 6 步:四条都有,才算交付 对拍 不变式 终止 复杂度 ✓ ✓ ✓ ✓ 交付一个自己设

开始练习 →

对拍在这套办法里排第几

学完这条路线,再看「和另一种写法对拍」这件事,它的位置是【0】。

开始练习 →

这条路线上的四个数

把前面几节算出来的四个关键数字汇总输出:判素数的第一个反例、归并漏一句时放过它的输入数、比较排序的下界、十六次 push_back 的总搬移。 #include <algorithm> #include <iostream

开始练习 →

第一步把不变式验起来

交付流程第一步:给自己的算法写一个循环不变式,在正数和全负数两组数据上各验一遍,输出各自成立的轮数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第二步对拍快速证伪

第二步:拿一个笨办法对拍。把 {17, 24, 15, 13, 23} 的全部 120 种排列都跑一遍,输出「是否全部一致/最大值」。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第三步三步论证

第三步:把不变式证明的三步各验一次。这一步和第二步的区别是——它不依赖你挑了哪些输入。输出如 过/过/过。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

第四步复杂度依据

第四步:给出复杂度依据——数操作次数,不掐表。在 5 / 10 / 20 个元素上各数一次比较次数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

交付五条验收一起过

最后一步:把「设计 + 证明 + 复杂度」收成五条验收条款:对拍、不变式保持、全负数组也对、比较次数正好是 n-1、前四条全成立。输出如 过/过/过/过/过。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

找到反例之后先做什么

用对拍找到了一个让程序出错的输入,接下来最该先做的是【0】。

开始练习 →