调试注意事项
写程序检查
多测要清空!
如果怀疑是程序在某条分支出现错误,尝试在分支处输出不可能的答案,然后fc样例输出,看看这一答案对应的原样例输出和输入,说不定能发现什么猫腻。
我们离散化的时候不是会用到unique
吗?他的格式是这样的unique(start,end,compare)
,其中compare
参数是代替==
的比较函数,可选择不写。返回值是去重后的end
。
调试过程:分步调试,优先确定前面部分是否正确;输出中间值,善用assert
和cerr
。
提交前检查
空间开没开够,开没开多,会不会MLE?
跑一遍手生成的大样例看看会不会TLE?
检查有没有编译器的逆天错误,例如非void函数没有return 或者 函数没有声明返回值类型。
检查freopen
。
提交后检查
如果在本地和OJ评测结果不一样,可能是因为:
- 有未定义行为:加入
-Wall -fsanitize=leak,undefined,address
编译选项;检查函数有没有返回值,有没有地址溢出,有没有变量未初始化 - 栈空间不足:本地栈空间不足,可以使用
-Wl,--stack=536870912
命令开出 \(512\) MB空间(后面的数字是字节数)。 - 评测机环境与本地不同:尤其注意windows环境下的换行字符有
\r
,而linux环境下没有