刷板题系列
我已经菜到只能刷板题了 QwQ 。
愈发意识到,会和熟练是两码事,熟练与不熟练的差距真的很大。
半平面交
- 可用交点 + 叉积判断是否弹栈。
- 先弹队尾,后弹队首。
- 加完所有直线后还要用队首来弹队尾。
- 注意处理平行线。
1 |
|
扩展卢卡斯
- 算阶乘之前预处理
mod
以内的前缀积。
1 |
|
后缀排序
- 重新计算
rank
之前要把rank
拷贝到tmp
数组用于比较。
1 |
|
带花树
- 缩花的时候必须跳
pre
更新而不能跳并查集。 缩花前先判断两个点是否已经在一个花里了(不判也不影响正确性)。- bfs 的点必须是非匹配点。
- 缩花的时候要把黑点染成白点并加入队列(事实上任何把点染白的操作都要入队)。
- 白点搜到黑点啥事没有。
1 |
|
KM
- 要等队列全部弹空了再更新顶标。
- 由于是 bfs ,也要记
pre
以便在找到増广路后交错更新,但这里的pre
只需要记从右边到左边的点,表示的是更新其slack
的点。 - 只能找
slack
为零的点尝试増广。 - l, r 很容易混淆,需要注意。
1 |
|
半在线卷积
- 可以预处理转移数组 \(b\) 的点值表示,从而把两个 log 的瓶颈之一卡成一个 log 。
- 用
long long
存的话加法就不需要取模,但是不在瓶颈。
1 |
|
扩展 BSGS
- \(b \bot \gcd(a, p)\) 时要及时返回无解。
- 可能不到 \(\sqrt{p}\)
轮幂次就重复了,要及时退出以防
map
内用大的指标覆盖了小的指标(只是求可行解的话就无所谓)。
1 |
|
min25 筛
- 不需要单独维护质数的函数前缀和,由于需要的质数都不超过根号,直接在
\(g\) 上面就能查到,并且有
id(p) == p
。
1 |
|
pollard-rho / miller-rabin
- miller-rabin 选 9 个质数 (2 到 23) 就可以判断 \(10^{18}\) 内所有数。
1 |
|
万能欧几里得
- \(n\) 在辗转相除后会到 \(lim^2\) 级别。
1 |
|
来一个从 1 开始标号的简洁版本(适合全文背诵):
1 | node F (int a, int b, int c, ll n, node X, node Y) { // 从 1 标号 (b < c) (a < c) |
多项式求逆
1 |
|
FFT
1 |
|
回文树
- 与 SAM 不同的是,回文树的比较总是要拿
len
和原串s
作为依据,而不是仅仅判断ch[u][x]
是否有值。
1 |
|
Manacher
1 |
|
二次剩余 Cipolla
- 注意先用欧拉准贼判断无解,以及特判 0 的解。
1 |
|