那些年犯下的 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\) 之类的...