调试的顺序
约 8 分钟
出错别乱猜,按顺序来,四步:① 读报错——编译错、运行时错(RE,如越界、除零)都会给行号或信号,先读懂它,很多问题报错里就写着;② 打印中间值——在关键处输出变量,看哪一步的值开始和预期不符,错误就夹在那前后;③ 缩小到最小例子——把出错输入一点点删到不能再删还出错,剩下的往往直指 bug;④ 对拍——前面几步还定位不了,就用上一节的对拍自动造反例。
// 第 ② 步:临时打印,定位后删掉或用宏关掉
#define DBG 1
if (DBG) cerr << "i=" << i << " f=" << f[i] << "\n"; // 输出到 cerr 不污染答案
顺序的道理:从快到慢、从便宜到贵,能一眼看出的先看,读报错几秒钟、对拍要写生成器最费事,放最后。坑:调试输出用 cerr(标准错误),别用 cout,否则会混进正式答案里判错;提交前记得关掉所有调试打印。把这四步记牢,遇 bug 照做,比盯着屏幕干想快得多。
小纸条
把这四步记下来。
登录 后可看答案