前言
一篇很正经的博客…qwq
套路
-
网格问题可以考虑行列是否满足可交换性质
-
方案数或者说个数难以计算的时候可以考虑转换为概率
-
dp转移可以考虑将系数进行前缀和或者矩阵优化
-
本质不同的回文串只会有 n n n个
-
按照dfs序排序构造出整棵树
-
Kruskal重构树的性质
-
最大前缀和 如果让 ∑ i = 0 n a [ i ] \sum_{i=0}^na[i] ∑i=0na[i]最大的那个 i = x i=x i=x
那么对于 a [ 1... x ] a[1...x] a[1...x]的所有后缀 > = 0 , a [ x + 1.. n ] >=0,a[x+1..n] >=0,a[x+1..n]的所有前缀 < 0 <0 <0
技巧?
- 乘法爆
longlong
了怎么破!- 快用快速乘法呀!
ll mul(ll x, ll y) {
ll ans = 0;
for(; y; y >>= 1) {
if(y & 1) ans = (ans + x) % mod;
x = (x + x) % mod;
}
return ans;
}
- 求逆元复杂度高达
n
l
o
g
n
nlog_n
nlogn怎么办
- 可以逆着乘上去哦!一般递推式都满足这个哦!
void init() {
jc[0] = ny[0] = 1;
for(int i = 1; i < N; ++i)
jc[i] = mul(jc[i - 1], i);
ny[N - 1] = q_pow(jc[N - 1], mod - 2); //一次快速幂就行啦
for(int i = N - 2; i >= 1; --i)
ny[i] = mul(ny[i + 1], i + 1);
}
怎么快速知道自己有没有爆longlong啦?
linux/mac下
编译时加上-ftrapv
。。
再运行即可知道啦~