模板(和杭州造地铁一样缓慢地补全ing)


2019/3/18 UPD:由于代码部分太长翻起来很不方便,CSDN又不能折叠,于是决定都丢到剪贴板里。
好多算法都还不会呢QAQ
NOIP之后都要慢慢补起来了_φ( °-°)/

其实感觉没有足够的题量支撑会板就很苍白
但是不学板碰到题就更不会了。。
但是一次性刷一个板子的大量题感觉也不好。。。

其实挺讨厌学新算法的,主要是讨厌代码。。
好不容易弄懂思想,还要“抄”很久的代码才能在比赛里写出来。。
基本上经典算法都得参考经典代码的吧。。不然就不优。。
但是有时候和自己风格并不同的代码,学起来难受到爆炸= =
所以我只能xjb口胡

长链剖分

博客

CODE就贺这一篇了

LCT

CODE

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

是真的不会
【模板】后缀自动机
CODE

Treap

思想:random
[NOI2004]郁闷的出纳员 CODE
做数据结构题,不能直接无脑码,想一想有没有简单做法。

FHQ Treap

split和merge
【模板】普通平衡树
CODE

网络流

思想:找增广路
最大流 CODE
费用流 CODE
有上下界无源汇可行流:先满足下界,通过附加流使其流量守恒
有源汇:连接S,T,转换为无源汇
清理雪道
[CQOI2012]交换棋子
[CQOI2009]跳舞

KM

思想:xjb修顶标
分配问题 CODE

莫队

思想:分块,跳来跳去的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} m n

主席树(可持久化线段树)

思想:每次最多修改 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) (fg)(n)=dnf(d)g(n/d)
莫比乌斯函数:

  • ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d|n}\mu(d)=[n=1] dnμ(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=p1p2pt0,   otherwise
  • μ \mu μ 是积性函数,可以用线性筛求得

CODE

莫比乌斯反演:

  • f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum_{d|n}g(d) f(n)=dng(d),则 g ( n ) = ∑ d ∣ n μ ( n / d ) f ( d ) g(n)=\sum_{d|n}\mu(n/d)f(d) g(n)=dnμ(n/d)f(d)
  • f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum_{n|d}g(d) f(n)=ndg(d),则 g ( n ) = ∑ n ∣ d μ ( d / n ) f ( d ) g(n)=\sum_{n|d}\mu(d/n)f(d) g(n)=ndμ(d/n)f(d)
  • 奇奇怪怪的两个式子奥妙重重。。证明大概用狄利克雷卷积吧,第二个结论就是把狄利克雷卷积魔改一番就得出了(参考博文1)QAQ

杜教筛

点分治

思想:找重心分治
经典例题:求树上<=K的路径数
大概是我写得丑,怎么一堆dfs。。
CODE
UPD:我以为我以前对点分治的实现很low,然后我看了一下代码,woc我写的是什么东西,怎么看不懂了啊,我以前在写它的时候大概动了很多脑子吧。。没看别人的。。。虽然还是不优美就是了。。。
略微改进了一下(并没有)CODE

高斯消元

经典例题:POJ1830 开关问题
然而这题好像把I,J搞反了。。
CODE

树链剖分

CODE

CDQ分治

  • 原来一直觉得很难的东西(学了N遍都没学会板子),发现和归并有点像
  • 经典例题:三维偏序 要注意对相同值的处理

CODE

KMP

CODE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值