常见错误总结

2021-08-13

持续更新中~

0. 文件输入/输出

  • 大型考试中,严格加 freopen,同时注意要将输入输出的文件名写对,一定记得删掉测大样例时输入的文件名后缀。
  • 校内OJ模拟赛时,测完大样例记得删掉 freopen,或在文件前后使用 #ifndef ONLINE_JUDGE。洛谷也不支持文件I/O。
  • loj上明确写有"文件I/O"的要加文件输入输出。

1. 死循环/不出结果

  • 快读写错。
  • scanf 忘写取址符 &
  • 多测未赋初值/未清空导致死循环(尤其注意 headtag 等数组是否清空)。
  • 在一棵 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 << 321ll << 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$ 倍空间。
  • 洛谷日爆。

Records

Welcome!

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.