总结与心得(持续更新)

不知道为什么,刚学的算法过了2个月就忘得一干二净,我并没有背代码啊,当时学的时候还刷了好多题来着→_→,我是不是大脑能力严重衰退了。


动态规划

单调队列

  一般情况下,${dp}$方程可以搞成这样:${f_i=f_j+t_j+t_i}$,只要其中没有变量同时与${i,j}$都有关,那么我们可以用单调队列来做,单调队列里面元素的关键字就是与${j}$有关的东西${f_j+t_j}$。example:生产产品

  有些比较特殊的,虽然存在同时与${i,j}$相关的函数,但是这个函数比较简单,使得已经存在在单调队列中元素的相对位置不会因此改变,这样的话我们可以打一个全局标记来处理。example:瑰丽的华尔兹

  还有一些比较奇葩的,这已经不属于单调队列优化dp的范畴了。example:cut the sequence

斜率优化

  想当年我还写过学习笔记,现在毛都不记得了T_T,斜率优化学习笔记。反正套路都差不多,不过我还是更喜欢从函数的角度去理解斜率优化。

  斜率单调。example:特别行动队

  斜率不单调。example:购票

  横坐标不单调。example:货币兑换

状压dp

  插头。插头还是挺简单的,就是一个板子,随着题目的变化稍微修改一下就好。example:Tony's Tour

  容斥套着,到了考场也不知道会不会做 ╮(╯_╰)╭。example:局部极小值

数位dp

  写成记忆化搜索的形式会好很多,注意该开LL的时候开LL。example:Balanced Number


prufer

  prufer序列中每个数出现的次数就是它在树中的度数-1。example:明明的烦恼

  经常用来做树的计数一类dp。

树分治

  点分治。关键是对答案的统计用什么算法和数据结构进行处理。example:Tree

  有的时候,一定要小心的就是扫把型的树,如果不对子树进行排序,很容易就会被卡掉。example:重建计划

  动态树分治。没什么好说的,也许我没做过什么题。example:开店

  树上CDQ。example:购票

树链剖分  

  树链剖分的性质(一个点到根节点的路径上的轻变不超过$log$条)可能有些奇技淫巧。

  最简单的维护树上路径修改查询。example:软件包管理器

  dsu on tree。其实就是树链剖分维护启发式合并,在某些情况下特别好写= =。example:天天爱跑步

  长链剖分维护合并跟深度有关的信息。复杂度证明:每次合并的次数是这个节点连出的轻边的点所在的重链的大小,那么每条重链最多只会被记录一次,所以总合并次数是$O(n)$。听说还能$O(n)$求lca。example:坑着

虚树

  虚树就是只含有查询点以及它们lca的点的树,往往与树形dp一同食用。虚树的题目往往其询问点的总数不会超过某个值,必须要满足在虚树上dp可以降低复杂度。教程?

  example:世界树

Link Cut Tree

  link的实质是找到父亲,cut时换根是为了搞清楚两点之间的父子关系。带边权的换成点。example:魔法森林

  LCT维护可加减子树信息,如果不是可加减的就只能toptree了。注意在轻重边替换的时候同时更新信息。example:共价大爷游长沙

  ntr的妙用= =。example:CC某题

  一类问题的通用解法,分类维护前缀信息和后缀信息。example:城市旅行


数据结构

KDtree

  能不写最好还是不要写吧,轻松被卡→_→,也许可以出奇制胜?如果要写,重新构树是个不错的选择。发现大数据跑不过,多半是剪枝挂了。

  平面上最近(最远)点对。example:SJY摆棋子

  范围内点权查询,暴力重构。example:简单题

  神应用,怒艹一类数据结构题。example:A simple rmq problem

Splay

  扣区间$[l,r]$的时候,把$l+1$Splay到根,$r+1$Splay到根的右儿子,然而加了“哨兵”,实际上是$l$和$r$。

  rotate和Splay记得要加取地址符。

  对区间操作完后记得pushup父亲和根,pushup的时候size记得+1啊啊啊。

  example:维护数列

ST表

  好像没什么好说的,一些细节想清楚就好了= =。example:超级钢琴

treap

  比Splay好写一些树套树方便一些可以持久化。思想还是蛮简单的,随机一个权值保证logn的期望树高。

  非旋转版现在还策不清,如果真的考了可持久化treap那我还是早早弃疗吧=  =。example:普通平衡树

分块

  通常用来优化暴力。

  树上分块。example:王室联邦

  权值分块。example:dispatching

  优化暴力。example:最小公倍数

  数据有一些特色的,可以分两类:$ > \sqrt{n}$和$ < \sqrt{n}$,分别处理与复杂度分析,然后基本不等式搞一搞取最优块大小。好像没有什么好的例子。。example:普通计算姬

可并堆

  好写好调好理解,代码简短。example:disoatching

链表

  双向链表大法好。example:营业额统计

启发式合并

  把size小的往size大的里面丢,合并次数$logn$。example:森林

  貌似写过的启发式合并都是直接set了=。=

树套树

  二维线段树。example:魔幻棋盘

  线段树套treap。example:二逼平衡树

树状数组

  区间修改。example:poj某题

线段树

  呵呵,线段树上各种耍杂技=  =。

  维护连通性。example:堵塞的交通

  扫描线结合。example:Picture

  二维线段树。单点修改矩形查询,example:魔幻棋盘;矩形修改单点查询;可以直接标记可持久化,example:树状数组

  蜜汁思路。example:基础数据结构练习题

  线段树合并。example:CF 666E

  超哥线段树。example:robot

  区间取最值操作。example:hdu某题

  历史最值查询。example:CPU监控

  还有个劲(j)爆(b)玩意儿现在都还不懂。example:CF某题

主席树

  ntr的妙用=  =。example:CC某题

  优化网络流连边。example:a+b problem

  可持久化数组。example:可持久化并查集

  树状数组套主席树。其实是树状数组套权值线段树=  =。


数学

BSGS

  用来求解$a^x=b~(mod~p)$,所谓大步小步。可能出现无解的情况。example:板子题

多项式乘法

  注意数组大小,以及最后除一个$n$。循环卷积注意细节变动。转成整型的时候不要爆了int。板子一套:多项式乘法

  求解字符串匹配问题。example:万径人踪灭

  预处理$ω$加强精度,任意模数FFT,倍增优化dp。所谓倍增优化,就是$f_i$可以由$f_x$和$f_y$推过来($x+y=i$)。example:CF某题

  离散对数NTT,循环卷积,求解原根,倍增优化dp。

  所谓循环卷积,就是在DFT回来统计答案的时候,除了加上对应位置$x$上的卷积结果,还要再加上$x+m-1$位置上的卷积结果。example:序列统计

博弈论

  当前局面的SG等于后继状态的SG的$mex$,当前游戏的SG等于各个子游戏的SG状态的$xor$。大都是脑洞题,考场上只能看人品了。。

  求解SG函数。example:江南乐

  暴力求解SG,找规律。example:S-NIM

高斯消元

  模意义高斯消元,其实就是除的时候乘个逆元。example:SETI

  线性基相关。example:XOR

  线性基性质。线性基中每一个可以被异或出来的元素的异或方案数相同(包括0)。example:albus就是要第一个出场

  动态构造线性基。example:元素

数学相关dp和组合计数

  多推推式子转化一下问题,从不可做变成可做。组合数公式的话大概用格点法推一推?$\displaystyle \binum{n}{m}$表示从$(0,0)$走到$(n-m,m)$的方案。

  dp期望或者dp概率通过概率算期望。example:亚瑟王

  精度要求不高的,可以估算一下计算的次数。example:CF坦克大战

  异或相关dp的正确AC姿势,虽然没有什么普适性。example:Lights

  二进制相关dp的正确AC姿势。一般先考虑排列方案最后再除个阶乘会好很多。转移的时候考虑到相等的情况,需要容斥一发。example:facer's chocolate dream

莫比乌斯反演

  $mu[i]$,如果i的某个质因子指数大于$1$,$mu[i]=0$;否则,$mu[i]=(-1)^{i的质因子个数}$

  推式子的时候一定要小心,把一些东西提前的时候不要忘记乘或者除了个什么东西。

  $\lfloor n/i \rfloor$,取值相同的$i$的范围为$[i,n/(\lfloor n/i \rfloor)]$。

  用来容斥,很棒棒哦。example:完全平方数

  约数个数有一个比较经典的式子。example:约数个数和

  线性筛约数和。离线处理约束条件。example:数表

欧拉函数

  在线求欧拉函数。example:Longge的问题

  一个公式。example:Robot

  当$n>2$,$φ(n)$是偶数。example:上帝与集合的正确使用方法

置换

  Burnside:对于一个置换$f$,若存在一个着色方案$s$经过置换后不变,称$s$为$f$的不动点,等价类数目为所有置换的不动点的平均值。example:Cards

  Polya:假设可以有$k$种颜色,那么一个置换$f$的循环内的元素的颜色必须相同,等价类的数目为所有置换的$k^{循环个数}$的平均值。example:Let it bead

  一个是对染色方案考虑,另一个是直接对置换考虑。

数论大合集

  费马小定理优化矩阵乘法。example:矩阵游戏

  Lucas,费马小定理,中国剩余定理。example:古代猪文

  Lucas用的时候要注意特判$m=0$,同时组合数记得特判$n<m$。模数不是质数的Lucas,就用古代猪文中的方法,分解质因数然后CRT合并。

  exgcd和CRT最好还是用LL运算,不然怎么挂的都不知道=。=

  暴力容斥。example:跳蚤


 

字符串

AC自动机

  没啥好说的。。。板子题:阿狸的打字机

HASH

  也没啥好说的。。板子题:火星人

KMP

  还是没啥好说的。。可能会有奇技淫巧吧。板子题:动物园

manacher

  我已经不记得了。板子题:不知名

trie

  异或贪心相关。example:poj某题

  trie树合并,跟线段树合并差不多。example:Alice和Bob又在玩游戏

后缀数组

  基本的论文二分答案+按照height分组的思想。example:milk patterns

  单调栈。example:CS

  后缀自动机求后缀树组。example:板子题

  双向链表。example:生成魔咒

  分割点。example:mrs

后缀自动机

  


思想

CDQ分治

  看起来很强但是很simple的一个玩意儿。

  CDQ图分治。example:城市建设

  CDQ上树+维护斜率优化dp。example:购票(这题出现频率真高=  =)

  一道还不错的题。example:共点圆

  四维偏序。example:偏序

倍增

  没啥好说的,注意边界细节。

  神题一道。example:会议中心

  倍增优化dp,类似快速幂。example:序列统计

莫队算法

  莫队还是挺灵活的,各种升级版本都有=  =。

  树上莫队。example:糖果公园

  在线莫队。其实就是预处理出来n个询问,然后每次读入的询问暴力移左右端点。example:坑

  江队。只有插入或者删除的莫队。example:坑

  总之在考场上应该也能YY出来吧,一定要注意常数啊,一个小小的细节可能就葬送AC=。=

平面图与对偶图

  优化网络流。example:海拔

  抠域和点定位。example:平面图(话说看这毒瘤题真的大丈夫?=  =)

整体二分

  没啥好说的。example:接水果


小技巧

  差分求解区间gcd。example:魔幻棋盘

  当答案是这种$ans=a/b$的形式,二分答案是个不错的选择。example:最小圈

  二分$delta$。example:tree

  两个熏肉贪心题。哈夫曼;example:荷马史诗。田忌赛马;example:泡泡堂BNB

  图的hash(话说这真的叫hash吗,反正王队长这么说那我就跟风了=。=)。example:DZY loves Chinese

  弦图。话说这玩意儿真的会考吗。example:神奇的国度

  $O(1)$黑科技double快速乘。如果没记住还是龟速乘吧,写错一点都会GG。example:随机数生成器

posted @ 2017-04-14 22:19  MashiroSky  阅读(1884)  评论(2编辑  收藏  举报