Errorprone

A.编译器类

  1. 一个 fcy 曾经提供的。宏定义谨慎使用。

    举个例子,我们有一个 #define max(a,b) a>b?a:b,这个东西其实非常危险。因为这句宏定义里的每一个所需值都会调用后再处理。比如说我们有一个函数 f(n),它的复杂度是 $O(2^n)$ 的。如果说调用 max(f(n),f(n-1)) 的话,上面的函数实际上会执行四次。

  2. 如果全篇都用的是 long long,并且使用了一些常数,建议使用 1ll 参与运算。因为 1 默认是一个 int 类型的东西,很容易溢出。

  3. next 这个东西在一些新版本的编译器中无法通过编译。谨慎使用。

  4. 段错误的寻找方法。虽然在 这里 曾经提过一嘴。使用 gdb 寻找段错误可以有效的提高效率。

  5. 传入 double 类型参数,但是函数内部的类型是 ll 的时候是不会报错的。还有 bool 之类也是同理。所以这个一定要谨防。

B.其他

  1. 无向图存边要开两倍。离散化数组要开多倍。

  2. 数组有时候要适量开大防止 RE。但是同时一定要谨防爆内存。这个东西往往最考验经验和心态。。。

  3. 调试时候的 printf 语句尽量换行,防止误删源代码。

  4. 断环为链有时候要开 3 倍而非 2 倍。比如说 这个题

  5. 慎用 memset 清零,可能会复杂度爆炸。

  6. 图论建模的时候加入了源点,那么时刻注意此时的点数为 $n+1$。