文章目录
2019/3/18 UPD:由于代码部分太长翻起来很不方便,CSDN又不能折叠,于是决定都丢到剪贴板里。
好多算法都还不会呢QAQ
NOIP之后都要慢慢补起来了_φ( °-°)/
其实感觉没有足够的题量支撑会板就很苍白
但是不学板碰到题就更不会了。。
但是一次性刷一个板子的大量题感觉也不好。。。
其实挺讨厌学新算法的,主要是讨厌代码。。
好不容易弄懂思想,还要“抄”很久的代码才能在比赛里写出来。。
基本上经典算法都得参考经典代码的吧。。不然就不优。。
但是有时候和自己风格并不同的代码,学起来难受到爆炸= =
所以我只能xjb口胡
长链剖分
CODE就贺这一篇了
LCT
Splay
被记录父节点以及指针的各种奇怪问题折磨疯掉。。
指针引用不能乱用啊。。。
本来想写不记录父节点的版本,但是我学splay只是为了LCT,LCT不记录父节点反正我不知道咋搞。。
不LCT的话,大概还是会写FHQ Treap吧,害。
代码实在是不太优美的亚子
CODE
Manacher
长度偶数的回文要加特殊字符
CODE
动态dp
将dp转移用矩阵维护,轻边的dp值attach上去。。然后树剖搞一搞。。。
【模板】动态 DP
CODE 写了半天竟然还不到两百行
总觉得noip考模板题十分【数据删除】,但是自己菜也不能怪别人。
博弈论
可能不能算在模板里面,不过有些模型是差不多的,有些就比较玄学找规律
- NIM游戏:xor和为0
- 阶梯NIM游戏:偶数没用,对奇数做一次操作就相当于丢掉,转化为普通NIM游戏
- SG函数
- 其实还有SJ定理,可以感受成Anti-Nim游戏,但是!!!SJ定理并不是完全适用的,它的条件是必须在所有单一游戏SG值为0的时候游戏就结束……
- [HNOI2007]分裂游戏
大胆猜想,胡乱求证- [NOI2011]兔兔与蛋蛋游戏
线段树合并
好像按权值合并复杂度就是log?势能分析不是很懂,总觉得有点玄学。。
[Vani有约会]雨天的尾巴
CODE
斜率优化
感觉上就是给斜率搞个单调队列,感觉也不是很有意思。
[ZJOI2007]仓库建设
[APIO2014]序列分割 CODE
把队首默认为1怎么回事,而且还都能过,就bzoj上大概WA了一个点吧。。
SAM
Treap
思想:random
[NOI2004]郁闷的出纳员 CODE
做数据结构题,不能直接无脑码,想一想有没有简单做法。
FHQ Treap
网络流
思想:找增广路
最大流 CODE
费用流 CODE
有上下界无源汇可行流:先满足下界,通过附加流使其流量守恒
有源汇:连接S,T,转换为无源汇
清理雪道
[CQOI2012]交换棋子
[CQOI2009]跳舞
KM
莫队
思想:分块,跳来跳去的L和R
经典例题:小Z的袜子
原来这个也不难啊。。
CODE
P.S. 网上很多教程说分块大小取
n
\sqrt n
n 最优,复杂度为
O
(
n
n
)
O(n\sqrt n)
O(nn),这是不严谨的,当
n
n
n,
m
m
m差别较大时使用
n
\sqrt n
n 作为分块大小效率会明显偏低。应取
n
m
\frac{n}{\sqrt m}
mn 。
主席树(可持久化线段树)
思想:每次最多修改
l
o
g
n
logn
logn 个节点,只新建这些节点即可。
经典例题:静态区间第
K
K
K大
CODE
FFT/NTT
思想:点值与系数的快速转换,蝴蝶操作。
经典例题:多项式乘法
NTT:把
ω
\omega
ω 改成原根就完了,代码暂时就这个吧
CODE
莫比乌斯反演
参考博文1
参考博文2
狄利克雷卷积:
(
f
∗
g
)
(
n
)
=
∑
d
∣
n
f
(
d
)
g
(
n
/
d
)
(f*g)(n)=\sum_{d|n}f(d)g(n/d)
(f∗g)(n)=∑d∣nf(d)g(n/d)
莫比乌斯函数:
- ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d|n}\mu(d)=[n=1] ∑d∣nμ(d)=[n=1]
- μ ( n ) = { ( − 1 ) t , n = p 1 p 2 … p t 0 , otherwise \mu(n)=\begin{cases}(-1)^t,\ \ \ n=p_1p_2 \dots p_t \\ 0, \ \ \ \text{otherwise}\end{cases} μ(n)={(−1)t, n=p1p2…pt0, otherwise
- μ \mu μ 是积性函数,可以用线性筛求得
莫比乌斯反演:
- 若 f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum_{d|n}g(d) f(n)=∑d∣ng(d),则 g ( n ) = ∑ d ∣ n μ ( n / d ) f ( d ) g(n)=\sum_{d|n}\mu(n/d)f(d) g(n)=∑d∣nμ(n/d)f(d)
- 若 f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum_{n|d}g(d) f(n)=∑n∣dg(d),则 g ( n ) = ∑ n ∣ d μ ( d / n ) f ( d ) g(n)=\sum_{n|d}\mu(d/n)f(d) g(n)=∑n∣dμ(d/n)f(d)
- 奇奇怪怪的两个式子奥妙重重。。证明大概用狄利克雷卷积吧,第二个结论就是把狄利克雷卷积魔改一番就得出了(参考博文1)QAQ
杜教筛
点分治
思想:找重心分治
经典例题:求树上<=K的路径数
大概是我写得丑,怎么一堆dfs。。
CODE
UPD:我以为我以前对点分治的实现很low,然后我看了一下代码,woc我写的是什么东西,怎么看不懂了啊,我以前在写它的时候大概动了很多脑子吧。。没看别人的。。。虽然还是不优美就是了。。。
略微改进了一下(并没有)CODE
高斯消元
经典例题:POJ1830 开关问题
然而这题好像把I,J搞反了。。
CODE
树链剖分
- 根到一个节点最多logn条轻边
- 洛谷 P3384 【模板】树链剖分
- 思想其实不难理解,但一个板子就这么长。。这。。。
CDQ分治
- 原来一直觉得很难的东西(学了N遍都没学会板子),发现和归并有点像
- 经典例题:三维偏序 要注意对相同值的处理
KMP
- CF1137B 第一次写KMP就FST了