科学调试法
本人卒于 noip2024 T1,故作此文,以示后人。
你现在已经写完一道题的代码了,但你发现自己过不了样例。完全按照下面的步骤依次进行,你大概率可以调出来所存在的问题。
RE
这个比 WA 的情况少得多。
-
除以 0。
-
数组、STL 等越界。
-
栈溢出。
WA
-
请先再仔细读一遍题。特别是输入输出部分。
-
检查是否是没开
__int128
/long long
、忘记取模、多测没清空等问题。 -
请再读一遍你代码的逻辑。包括:在写的过程中因为觉得没想清楚而 mark 出来的部分、前后相似部分是否又相同逻辑……
-
过不了的样例规模很小
-
题意容易用人脑模拟
用人脑模拟,比对程序哪里出错。
-
分步检查。先输出前面一部分的结果,再输出后面的。
-
(在 DP 之类的题目中)可能原本你的程序是不记录方案的,但是为了更方便地比对,最好输出方案。
-
-
题意不易用人脑模拟(如概率、期望、博弈论题)
-
检查你推出来的式子是否有问题。
-
如果你直接看看不出来,请造一组更弱的、可以用人脑模拟的样例。比如概率题可以取概率为
,博弈论题取可以用对称法解决的情况云云。
如果还是调不出来,只有重复 1、2 并检查代码细节问题了。我没有更好的建议了。
-
-
-
过不了的样例规模很大
-
检查是否是数组开小之类的问题。
-
(如果是计数或最优化问题)分析答案是大了 / 小了,猜测是哪里出错了。如果猜不出来、或答案有大有小也没有关系。
-
过不了(或过了)的样例具有特殊性质:
-
先分析一下(不)具有这个特殊性质可能给程序带来的影响。
-
如果分析不出来,可以构造(或者拍一个)一个小一点的(不)满足性质的样例。
没有用?那么执行下面的步骤。
-
-
易对拍(已有正确性保证暴力,数据易造):
- 拍就完了。转化为规模很小的情况。
-
难对拍:
这才是重头戏。我们需要动用一些奇技淫巧。
-
将大样例中可能出错的部分单独拎出来,转化为样例较小的情况。
-
在不太确定的地方使用 assert 辅助检查。
。。。。。暂时想不出来别的了。。。
-
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下