Errorprone
A.编译器类
一个 fcy 曾经提供的。宏定义谨慎使用。
举个例子,我们有一个
#define max(a,b) a>b?a:b
,这个东西其实非常危险。因为这句宏定义里的每一个所需值都会调用后再处理。比如说我们有一个函数f(n)
,它的复杂度是 $O(2^n)$ 的。如果说调用max(f(n),f(n-1))
的话,上面的函数实际上会执行四次。如果全篇都用的是
long long
,并且使用了一些常数,建议使用1ll
参与运算。因为1
默认是一个int
类型的东西,很容易溢出。next
这个东西在一些新版本的编译器中无法通过编译。谨慎使用。段错误的寻找方法。虽然在 这里 曾经提过一嘴。使用 gdb 寻找段错误可以有效的提高效率。
传入
double
类型参数,但是函数内部的类型是ll
的时候是不会报错的。还有bool
之类也是同理。所以这个一定要谨防。
B.其他
无向图存边要开两倍。离散化数组要开多倍。
数组有时候要适量开大防止 RE。但是同时一定要谨防爆内存。这个东西往往最考验经验和心态。。。
调试时候的
printf
语句尽量换行,防止误删源代码。断环为链有时候要开 3 倍而非 2 倍。比如说 这个题。
慎用 memset 清零,可能会复杂度爆炸。
图论建模的时候加入了源点,那么时刻注意此时的点数为 $n+1$。