一些需要注意的点
可能你死了都不知道你会怎么死的。
这些错误我以前都没注意,然后死了。
希望这篇文章能帮到你。
卡常
- 模数用const
- 读入优化
空间
- 尽量多开一点点,比如用了长度为 \(n\) 的数组,空间就开 \(n+10\)
- 有位运算特别是 \(xor\) 和 \(or\) 时把数组开大一倍
精度
- 如果精度要求特别高,比如绝对误差 \(\leq{10}^{-10}\),就要用
long double
数据类型
-
计算一下是否要用
long long
(如果你担心会算错而且题目不卡常可以无脑用long long
) -
在做乘法取模的时候一定要把所有数强制转换成
long long
再乘,因为你并不能清晰的记得这些变量是int
还是long long
swap
- swap交换数组时会交换两个数组内的所有元素而不是指针。
对拍
-
一定要各种数据都试一下,小数据,大数据,边界情况。
-
出数据时尽量避免几个量 \(n,m,q\) 相等的情况,特别是网格类的题。
-
很多要取模的题可以在对拍的时候换一下模数(比如说换成特别小的模数),以检验是否有不该取模的地方加了取模,该取模的地方没有取模。
其他
- 在求组合数的时候要特判 \(n<m\) 以及 \(m<0\) 的情况。
ll binom(int x,int y)
{
return x>=y&&y>=0?fac[x]*ifac[y]%p*ifac[x-y]%p:0;
}
- 多加小括号,否则可能你想写
(1<<i)-1
会被解释成
1<<(i-1)
- 多加大括号,否则可能你想写
if()
{
if()
;
}
else
;
会被解释成
if()
{
if()
;
else
;
}
dfs树
注意重边带来的影响。