常见错误总结
持续更新中~
0. 文件输入/输出
- 大型考试中,严格加
freopen
,同时注意要将输入输出的文件名写对,一定记得删掉测大样例时输入的文件名后缀。 - 校内OJ模拟赛时,测完大样例记得删掉
freopen
,或在文件前后使用#ifndef ONLINE_JUDGE
。洛谷也不支持文件I/O。 - loj上明确写有"文件I/O"的要加文件输入输出。
1. 死循环/不出结果
- 快读写错。
scanf
忘写取址符&
。- 多测未赋初值/未清空导致死循环(尤其注意
head
、tag
等数组是否清空)。 - 在一棵 1 ~ n - 1 的树上深搜到 0 号节点导致死循环。
- 深搜某些条件没有
return
导致死循环。 - 循环条件写错如:
for(int j = 1; j <= i; ++i)
之类。 - 网络流
dis
初始化没有使用memset
导致没有将全部节点的初始dis
设置为INF
。 - 慎用
~i
代替i >= 0
,可能会因为边界出现一些不希望的死循环问题。
2. WA
- 没有注意数据范围,该开 long long 要开。
- 线段树
pushdown
写挂。 - 取模取挂。
- 如果一直输出
0
,检查:- 快读是不是
return
了读入的数。- 是否少读入了某些数。
- 结果为连乘积的时候,
ans
的初值是否为1
。
- 快读是不是
- 试图
1 << 32
或1ll << 63
。 - 位运算未注意优先级。
- 组合数运算时将
fac[n]
写成n
。 - 背包未继承上一层的值导致错误(
f[i][j] = f[i - 1][j]
)。 - BST 查找右子树排名
k
时减去左子树的siz
后没有 +1。 - 网络流初始时
cnt
未赋为1
。 - 没有删调试语句。
- 没有看清模数。
siz[y] += siz[x]
之类(写反)。- AC 自动机建 fail 树 dfs 时误将 1 当作根节点(
dfs(0)
而不是dfs(1)
) __builtin_popcount
的范围是 unsigned int,long long 范围内要用__builtin_popcountll
。- dfn 序需要映射回原数。(取 id,不是 dfn 序本身)
- 检查 vis 数组在该使用 int 类型时是否适用了 bool。
3. RE
- 数组访问越界。
- 线段树处理不好的话需要开 $8$ 倍空间。
- 洛谷日爆。
Welcome!
Updates may be slow
Hang around and make yourself at home.
Updates may be slow
Due to unstable connection to GitHub, blog posts may not be up-to-date.