模板复习
数学
半平面交求直线交点函数记忆技巧:$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} \rceil$
中国剩余定理与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:$$x\equiv(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)=\sum\limits_{k=0}^{n-1}y_k \frac{\prod_{j \neq k}(x-x_j)}{\prod_{j \neq 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树:看模板