作为一名OIer,无论是一名刚入门的蒟蒻,还是叱诧风云的神犇,相信都会难免去犯一些错误(废话不犯错误岂不是都满分了(ノへ ̄、)。在这里总结了一些OIer常见易犯的错误,与大家共勉。
1.正常错误
可能在我们平时的刷题与比赛的考试中,最常犯同时又犯得最多的就是这类错误了。主要分为以下几类:
- Wrong Answer(WA) 不通过:程序输出与标准答案不一致(不包括行末空格以及文件末空行)
- Time Exceeded(TLE) 不通过:程序运行时间超过了题目限制
- Memory Exceeded(MLE) 不通过:程序运行内存空间超过了题目限制
- Runtime Error 不通过(RE):程序运行时错误(如数组越界、被零除、运算溢出、栈溢出、无效指针等)
- Compile Error 不通过(CE):编译失败
对于这些错误呢,最好的解决办法其实就是多刷题,多积累经验,尽量地去克服。(其实就是没有什么解决办法了嘛)
2.低级错误
这些错误就不一样了。这类错误可能会是考试失利的最最最最主要原因。只要充分了解并刻意地去避免,是可以将这类错误的危害降到最低的。我主要总结出了以下几点:
- 文件名写错:可能有很多同学再打freopen的时候都喜欢复制粘贴,但粘到最后却忘改“in”与“out”,造成评测时满篇子CE。例如:
freopen("tt.in","r",stdin); freopen("tt.out","w",stdin);
- 文件操作忘了删注释:这个很好理解,调程序的时候注释掉了文件操作,最后却忘把注释删掉。
- 调用特定考试不允许的变量名称:一般考试都会有特殊说明,注意一下即可,本人就被此坑过。
- 输出格式问题:注意题中的描述,样例中间有没有空格,末尾有没有空格之类的。
- 代码忘保存:也不算是一个错误,但一定要注意。推荐使用一个带自动保存功能的文本编辑器,用cmd编译。如果用普通IDE的话一定要及时存到U盘里一份备份。
3.学术性错误:
听起来挺高端的,实际上只要你足够细心,很多也是可以避免的。
- 数组越界:这个不多说,别跟我说你没犯过。多数CE都是这种情况( ̄_, ̄ )
- 爆空间:MLE罪魁祸首,一定要算好。
- 爆栈:可能是最难看出来的一种错误了,经常导致CE。如果算不明白的话,多用用非递归形式。(如果都不会的话,拿拿部分分吧)
- 无向图:记得开二倍数组。
- 线段树:开数组之前一定要算好多大,如果不会的话,无脑开4倍吧。(都学线段树了还不会算空间真的是(/▽\))
- 网络流:开多大数组都是有讲究的,不能开小,也不能无脑开大。
- 图论:用spfa等算法的时候注意看有没有负环。
- 数据范围:看好数据范围,防止爆int之类的。
- 时间复杂度:确定自己算法能得多少分,对时间复杂度做好充分的了解。
- 循环:注意边界问题,更不要写反。(因此很多题我都爆过0╥﹏╥...)
- 如果不开全局变量的话,要给变量赋值,否则是随机数。
以上这些便是我在OI的学习中遇到过的部分问题,以后可能随时补充,也同时欢迎大家给我补充,我们共同成长,共同进步!