常见错误清单(长期更新)

  • 素数筛打表的时候默认为1为素数

  • DP转移过程中记录路径的情况,如果是从后向前算的,可能路径会被更新掉

  • 每组数据初始化的时候,注意把建的边清掉一下

  • 对一堆数字进行取LCM的时候,可能会爆int

  • 结构体注意初始化问题,不要以为默认会被初始化为0,最好手写构造函数

  • ~是按位取反,只需要把一位取反的时候不要用

  • 线段树区间更新时updata忘记加lazy标记

  • 输出结果的时候,有时直接输出结构体本地不会错,交上RE,注意下要输出结构体的属性

  • 容斥原理判断某范围内模一些数为0的数的个数的时候,要求这些数之间不能一个数是另一个的倍数,比如2, 3, 4, 5,那么应该舍弃掉4,只取2

  • SPFA用栈替换成队列后,要注意出栈的顺序,要在加入新元素前把旧的出栈,加入新元素后取消出栈元素的标记

  • BFS某些情况应该在入队的时候标记,如果在出队的时候标记,有可能会出现一些不可描述的情况导致MLE

  • 数据太大爆int

  • 计算过程中爆int

  • 取模姿势不对爆int

  • vis,book等标记数组没初始化

  • bfs队列没有pop

  • 类似走迷宫那样的题,下一步要走的地方计算错误(比如ty 本应该是y+dirc[i][0],结果写成x+dirc[i][0])

  • 浮点数精度误差,要加eps

  • 数组过大每次都要memset初始化,导致超时

  • Case: 和数组之间有个空格,导致pe

  • 直接拿输入的数据当下标,因为有负数re

  • DP过程累加爆int

  • 题目卡SPFA换Dijstra AC

  • 题目卡Vector,用前向星AC

  • DP输出路径时,尽量要从末状态从后往前推,这样容易处理字典序

  • 解方程中,可能爆 int ,比如二元一次方程中的 B 来自输入的两个数据相乘,然后又用到了 B * B 结果 1000 的数据就会爆 int

  • 位运算一定要括起来,某些位运算操作优先级比等于号还低

  • 计算一组数据需要取膜时,记得手动初始化的也要取膜,比如斐波那契数列,f(1) = f(0) = 1 时, 如果模数为 1 那么应该初始化为 0 才对,保险写法为 f(1) = f(0) = 1 % mod

  • 代码WA的时候要多检查下比较长的公式是否错误

  • 对于 long long a = b b b 这样的式子要注意 b 是否为 long long 类型,如果不是运算过程中为 int 类型,检查下是否爆 int

  • 注意数据范围, 2^31 是爆 int 的

  • 用矩阵存图的时候,注意重边,如果有重边看情况更新