那些年犯下的 SB 错误

那些年犯过的 SB 错误

1: 多组数据忘记清空数组

2: 清空时 memset TLE

只要用 \(sizeof(int) * (n + 1)\) , 用多少清多少就好啦.

3: 求最值忘记初始化

最大值要初始化到 \(-inf\) (避免负数) , 最小值要初始化到 \(inf\) .

4: 位运算不会强转

\(1 << 40ll\) 仍然是int, 不会转成ll, 要用 \(1ll << 40\) .

5: 取模不规范, 亲人两行泪

不要看到 \(1e9 + x\) 就写 \(1e9 + 7\) , 万一是 \(1e9 + 9\) 呢?

6: 写错下标

\(i\) 个操作要修改的下标是 \(num[i]\) , 不要把下标写成 \(i\) , 要写 \(num[i]\) .

当前节点为 \(x\) , 循环变量为 \(i\) , 数组下标看清楚是 \(x\) 还是 \(i\) .

7: 新建指针时千万不能连等

ls = new node, rs = new node;

不能写成

ls = rs = new node;

否则会给 \(ls\)\(rs\) 赋成相同的地址.

8: 忘记初始化下标

在多次更新答案的时候, 如果答案需要输出方案, 且每次都是下标从 \(0\) 开始的方案, 记得把下标变量重置为 \(0\) .

9: 计数时漏掉最后的一段

如果是在出现非法情况时统计合法数量, 则需要在循环外特判一下最后的一段, 防止最后出现连续的一段合法.

10: 忘记取模

有时候要预处理阶乘之类的东西, 这个也是要取模的.

11: 忘记初始化

写数据结构的时候记得建树, 写倍增 \(LCA\) 和树链剖分的时候记得 \(DFS\) .

12: 变量名重复

\(i, j, k, l\) 这类常在循环中出现的变量名, 一定要注意一下有没有在全局/局部变量中出现.

13: 计算贡献时忘记乘价值

比如计算距离时直接加路径被计算的次数, 而忘记乘路径长度.

14: 读入字符/字符串时遇到空格/换行符

\(getchar\) 在读入时会读入空格和换行符, 所以建议使用 \(scanf\) .

15: 指针变量没有 new

定义完指针变量之后是个 \(NULL\) , 使用之前要先 \(new\) .

16: freopen 那些事

\(OJ\) 上记得删, 比赛中记得加

17: 清空不规范, 爆零两行泪

清空的时候注意数组使用了的范围, 尤其是多个变量时, 可能不同, 也可能是 \(n + 1, n + 2\) 之类的...

posted @ 2021-08-22 16:43  sshadows  阅读(65)  评论(4编辑  收藏  举报