扩大
缩小

OI 日常犯的一些错误

错误锦集:从 2020 年 7 月 开始更新。

01. 【置顶】数组开小 & 没对数组内存进行检查

2020/09/04:暑假以来第二次犯这样的错误了,必须好好看代码,测试极限数据,不能有下次!

2022/02/27:第三次了

模拟赛,有一道 $n \le 3 \times 10^5$ 的题目。

写代码的时候,我写了正解,却没有发现数组只开了 $10^5$。

为了 AC 这题,我还写了对拍,拍了成百上千组数据,没有发现问题(因为暴力是 $n \le 3000$)。

但没有对这题进行极限数据测试。

更可悲的是,我还对下一题(也是 AC)的题目进行了极限数据测试,却没有检查这题。

理由很简单,那道题在我的眼里明显比这签到题更重要。

过度的自信,往往会疏忽什么重要的东西。

最终,我只拿到比暴力多 10 分的分数。

 考后我还在想,还有两个多小时的时间,怎么会检查不出这个 bug。

没办法,只能怪自己,这并不是出题人的问题。

02. 输出 YES 和 NO 的大小写问题

03. 输入数据组数的时候,尽量用 while,不要用 for

04. 计数题有取模时,注意每一个涉及计数的变量是否取模过(实在难检查就在写的时候注释标记一下)

5. 有 -1 等特判时一定要注意!

6. 算好数组使用空间!

7. 能用 std::heap 的操作就不要用优先队列 

8. 线段树懒标记如果可以赋值为 0, tag 数组初始值就不能是 0,可以设为 -1 等。

9. (2021.7)不知道程序有多大的常数一定要造数据测试

10. (2021.7)能写树状数组不写线段树,能写邻接表结构就不写 vector

11. (2021.7)套用模板的题写完模板直接静态检查

12. (2021.8)写序列自动机题的时候要考虑是否有记忆化

13. (2021.9)注意前导零

14.(2021.12)涉及反向边编号异或 1 等操作的时候,边的编号应从 2 开始。

15.(2022.2)Tarjan 点双连通和边双连通想清楚再写

16.(2022.2)强制在线记得看 lasans

17.(2022.4)树状数组更新记得看下标是不是 0!!!

18.(2022.4)对拍严格按照数据范围

19.(2022.4)Dijkstra 的堆数组有的写法开一倍是不够的,要多开一倍

19.(2022.4)set 判断 lower_bound 或 upper_bound 如果判断是否不存在元素,不能用 * 号偷懒!

posted @ 2020-07-31 18:03  HoshizoraZ  阅读(259)  评论(0编辑  收藏  举报