那些年犯下的 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 之类的...
看不见我看不见我看不见我