模板复习

数学

半平面交求直线交点函数记忆技巧:$A_1=y_2-y_1,B_1=x_1-x_2,C_1=-B_1y_1-A_1x_1$,然后将$(A_1,A_2)$,$(B_1,B_2)$,$(C_1,C_2)$看成向量,则答案为$(frac{c*b}{b*a},frac{c*a}{a*b})$。

直接先化成点斜式然后解方程就好了,与y轴平行的特判一下。

顺时针旋转矩阵:[[cos -sin][sin cos]]

http://www.cnblogs.com/HocRiser/p/8420867.html

线性求素数逆元(减除乘模逆):$inv[i]=(MOD-MOD/i)*inv[MOD\%i]\%MOD$

BSGS:https://gitee.com/HocRiser/templates/tree/master/Others

注意$m=lceil sqrt{p} ceil$

中国剩余定理与Lucas定理:http://blog.csdn.net/clove_unique/article/details/54571216

CRT:$x=(sum c_i*(frac{M}{m_i})*inv(frac{M}{m_i},m_i))\%M$

exCRT:$$xequiv(inv(m1',m2')*(c2-c1)')\%m2' × m1 + c1 (mod [m1,m2])$$  (x'表示$frac{x}{(m1,m2)}$,下标记忆:1 2 2 1 2 1 1)

exGCD,扩展Lucas上网查。Mobius反演与杜教筛见博客。

FFT:注意次数界初值,只能多不能少。注意常数。注意范围是0~n-1

 rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1)) 

NTT:不要爆int。

 wn=ksm(G,(f==1) ? (md-1)/(i<<1) : (md-1)-(md-1)/(i<<1)) 

多项式求逆:$B(x)equiv B'(x)(2-A(x)B'(x))(mod x^n)$

多项式开根:$B(x)equiv frac{A(x)+B'^2(x)}{2B'(x)}(mod x^n)$

FWT:https://blog.csdn.net/john123741/article/details/76576925

计算几何直接看模板

拉格朗日插值:$A(x)=sumlimits_{k=0}^{n-1}y_k frac{prod_{j eq k}(x-x_j)}{prod_{j eq k}(x_k-x_j)}$

Miller-Rabin:随机几个[1,p-1]的数x,若存在正整数k使$x^frac{p-1}{2^k}equiv 1(mod p)$,或$x^{p-1}equiv 1(mod p)$不成立,则返回非质数。

算法

2-SAT:连有向边(不要连成双向的了),记得给逆否命题连边。(就是说一个条件总共连两条边)

Tarjan的时候用(inq[to[i])判断,弹栈用do-while循环

 do{ t=q[top--]; bel[t]=scc; inq[t]=0; } while (t!=x); 

一个点代表一个命题,若命题和否命题在同一个强联通分量中则无解

Tarjan及割边/桥等看模板,注意缩环成树和猜结论。

分块:分在不在同一块中考虑,后者分整块和两端考虑。

块状树和树分块:前者分在不在同一块中考虑,后者分到lim为止,同一块的才连边。

分数规划:巧妙的移项思想,注意考虑凸包,比如(没有用到分数规划)HNOI2014 画框,卡时考虑Dinkelbach。

匈牙利和KM:前者循环内清空vis数组就好,后者外循环给s赋inf,内循环给visx和visy清空。

Manacher和KMP:前者偶下标存原串,答案max(p[i])-1,后者记得找到匹配之后仍然要j=nxt[j]

点分治与单纯形:sum=sz[k],f[rt=0]=inf,后者看模板

CDQ与整体二分:考场上要想到。一维排序,二位树状数组,三维CDQ分治(一般也要配合树状数组)

网络流:记得cnt初值为1,记得当前弧优化

数据结构

主席树和可持久化Trie:注意&不要给错变量了。记得动态开点。

树链剖分: if ((k=e[i].to)!=f[x] && k!=son[x]) 注意向上爬的过程中深度比较是dep[top[x]]而不是dep[x]

Splay与Treap:前者好像没有什么特别注意的地方,注意建树就行了。后者特别注意sz什么时候该不该更新。

ins函数条件判断语句中没有sz更新而是在判断语句前有,而del函数则是在判断语句中出现。

树套树:尽量一次写对,调试很复杂。

虚树和左偏树:后者看模板

KD树:看模板

无旋Treap与可持久化Treap:看模板。
AC自动机:根节点是0,BFS的时候不是将0放入队列而是它的孩子
 rep(i,1,26) if (ch[0][i]) q[++ed]=ch[0][i]; 
一般建成Trie图不影响。注意fail树的应用。
后缀自动机:根节点是1,最后一个条件分支一共四行六句话。
后缀数组:注意下标从0还是1开始。
 for (int k=1,p=0; p<n; k<<=1,m=p){ p=0; ... 
代码开头要有 memset(y,0,sizeof(y)) ,最后是 rep(i,1,n) y[i]=x[i]; 
背后缀数组的自动机构建模板!
LCT:注意isroot(),不再有rt变量了。
 void access(int x){ for (int y=0; x; y=x,x=f[x]) splay(x),ch[x][1]=y,upd(x); } 
link函数只有mkroot(),findmin函数只有access()和splay()。其余MAS三者都有。
圆方树:见模板题。
原文地址:https://www.cnblogs.com/HocRiser/p/8423858.html