Collected By Hope_Y…
STL
部分来自QuincyTan
1 |
|
动态规划
引入
LIS问题:最长上升子序列
$ dp_i $表示以$ i $结尾的最长上升子序列,$ dp_i=max_{0 \leq j <i,a_j<a_i}(dp_j+1) $。
1 |
|
LCS问题:最长公共子序列
$dp_{i,j}$表示前缀子串中$a_{1-i}$与$b_{1-j}$的最长公共子序列,$dp_{i,j} = max({dp_{i-1,j},dp_{i,j-1},if(a_i = b_j) dp_{i-1,j-1}+1})$
$O(nlogn)$的解法:
1 |
|
背包dp
01背包
$n$个物品放入容积为$M$的背包,第$i$个物品的容量为$v_i$,价值为$w_i$,问最大价值。
1 | int dp[maxn]; |
完全背包
在01背包的基础上,每个物品是无限多的。
1 | int dp[maxn]; |
多重背包
在01背包的基础上,每种物品的数量是$c_i$个。
我们将所有物品全部摊开,相当于$\sum_{i=1}^{n} {c_i}$个物品,效率不高。
我们可以使用单调队列优化。
1 | //输入 |
分组背包
给定$n$组物品,第$i$组有$c_i$个物品,第$i$组的第$j$个物品的体积为$v_{i,j}$,价值为$w_{i,j}$,容积$M$的背包,求装得下的最大价值。
1 | int dp[maxn]; |
数位dp
1 | typedef long long ll; |
区间dp
1 | dp[i][i]=1; |
树形dp
1 | //求树的直径和第二长的路径 |
斜率优化dp
1 | //HDU3507 |
图论
最短路
Dijkstra(堆优化)
1 | struct node{ |
Floyd
1 | for(int k=1;k<=n;k++){ |
网络流Dinic算法
1 | typedef long long ll; |
数据结构
线段树
区间操作
1 |
|
二维线段树(HDU1823)
求二维区间的最大值(最小值)
1 |
|
势能线段树
1 | //1.给一个区间[L,R] 加上一个数x |
1 | //1,给出l,r,x,将序列l,r之间的所有数都 and x |
树链剖分
1 | //点权 |
1 | //边权版 |
LCA
1 | int deep[maxn],f[maxn],dis[maxn],p[maxn][30]; |
树分治
1 | //有多少对点之间的距离小于等于k |
单调队列
1 | //n个数,滑动窗口为k,求每次的最大值和最小值 |
单调栈
最大全1矩阵问题
1 |
|
莫队
1 | //求区间元素个数 |
hash
字符串hash
1 | typedef unsigned long long ull; |
手写hash
1 | struct Hash{ |
KMP
KMP
1 | const int maxn=1e5+10; |
1 | //给定字符串,对于整个串,求最短循环节的次数 |
扩展KMP
1 | //next[i]表示t[i...m-1]与t[0...m-1]的最长公共前缀 |
SAM
1 |
|
SA
1 | //清巨那偷来的板子QAQ |
PAM
求回文串
1 |
|
Manacher
1 |
|
数学
BSGS
当$gcd(y,p)=1$,在这种情况下,有可能给定$p$为质数。设$x=a * m - b$ ,$m= \lceil \sqrt p \rceil$,$ a \in [0,m+1)$,$b \in [0,m)$,那么原式变成$y^{a * m}=z * y^{b}$,先枚举$b$,计算$z * y^{b}(mod\ p)$,存到$map$中,再枚举$a$就好了。
SDOI2011
题意:给定$y,z,p$,计算1. $y^z (mod \ p)$;2. 满足$x * y \equiv z(mod \ p)$的最小非负整数的$x$;3.满足$y^x \equiv z\ (mod\ p)$的最小非负整数的$x$。
1 |
|
当$gcd(y,p) \neq 1$时,就要用到$exgcd$理论。
将原式写成$y * y^{x-1}+k * p=z,k \in Z$,根据$exgcd$,当$d=gcd(y,p)$不是$z$的约数就不会有解,有:$$\frac{y}{d} * y^{x-1}+k * \frac{p}{d}=\frac{z}{d}$$
一直递归直到$d=1$,设之间的所有的$d$的乘积为$g$,递归$c$次,令$x’=x-c\ ,\ p’=\frac{p}{g}\ ,\ z=\frac{z}{g}$,$y^{x’} * \frac{y^c}{g} \equiv z’(mod \ p’)$
然后再用BSGS求解。
SPOJMOD Power Modulo Inverted
1 |
|
欧拉降幂
求解$A^B \ mod\ C$,$B \leq 10^{1000000}$
若$a$和$n$为正整数并且互质
$a^{\varphi (n)} \equiv 1(mod \ n)$
$$
a^b \equiv
\begin{cases}
a^{b \ mod \ \varphi(p) } & \text{ gcd(a,p)=1} \newline
a^b & \text gcd(a,p) \neq 1 , b<\varphi(p) \newline
a^{ (b \ mod \ \varphi(p)) + \varphi(p)} & \text gcd(a,p) \neq 1 , b \geq \varphi(p)
\end{cases} \ \ \ \ \ \ \ \ \ \ (mod\ p)
$$
1 |
|
中国剩余定理
求解
$$
\begin{cases}
x \equiv a_1 (mod\ b_1) \newline
x \equiv a_2 (mod\ b_2) \newline
… \newline
x \equiv a_n (mod\ b_n)
\end{cases}
$$
1 |
|
1 | import java.util.*; |
线性同余方程
1、方程$ax+by=c$与方程$ax \equiv c (mod \ b)$等价,有整数解的充要条件是$gcd(a,b) % c=0$。
2、若$gcd(a,b)=1$,且$x_0,y_0$为方程$ax+by=c$的一组解,该方程的任意解可表示为:$x=x_0+bt$,$y=y_0+at$。
1 | int ex_gcd(int a, int b, int& x, int& y) { |
二次剩余
求解$x \equiv \sqrt{y} \mod p$
1 |
|
约瑟夫环
1 |
|
杜教递推
杜教线性递推
1 |
|
辗转相除法
求解满足$\frac{lb}{la} < \frac{y}{x} < \frac{rb}{ra}$,最小的$x$和$y$。
1 |
|
Miller_Pabin 素数判定
1 | ll qmul(ll a,ll b,ll mod){ |
大数分解质因数
求使得$\frac{A}{B}$变成有限分数的$k$进制的最小的$k$。
结论:最小的$k$就是$\frac{\frac{A}{gcd(A,B)}}{\frac{B}{gcd(A,B)}}$中$\frac{B}{gcd(A,B)}$的所有质因数相乘的积$ans$,答案就是$\beta = min(2,ans)$。
$pollard _ rho$模板
1 |
|
阶乘素因子出现的次数
$$
cnt(x)=\left \lfloor \frac{n}{x^1} \right \rfloor+\left \lfloor \frac{n}{x^2} \right \rfloor+…+\left \lfloor \frac{n}{x^i} \right \rfloor if(x^i<=n)
$$
1 | ll now=prime[i],sum=0; |
原根
如果 ${ r * 2 ^ k + 1 }$ 是个素数,那么在 $ {mod \ r * 2 ^ k+1} $ 意义下,可以处理 $ 2^k $以内规模的数据。
记录一下 $a ∗ 2^k+1$型素数的原根 $g$。
$a * 2^k + 1$ | $a$ | $k$ | $g$ |
---|---|---|---|
3 | 1 | 1 | 2 |
5 | 1 | 2 | 2 |
17 | 1 | 4 | 3 |
97 | 3 | 5 | 5 |
193 | 3 | 6 | 5 |
257 | 1 | 8 | 3 |
7681 | 15 | 9 | 17 |
12289 | 3 | 12 | 11 |
40961 | 5 | 13 | 3 |
65537 | 1 | 16 | 3 |
786433 | 3 | 18 | 10 |
5767169 | 11 | 19 | 3 |
7340033 | 7 | 20 | 3 |
23068673 | 11 | 21 | 3 |
104857601 | 25 | 22 | 3 |
167772161 | 5 | 25 | 3 |
469762049 | 7 | 26 | 3 |
998244353(常见) | 119 | 23 | 3 |
1004535809 | 479 | 21 | 3 |
1998585857 | 953 | 21 | 3 |
2013265921 | 15 | 27 | 31 |
2281701377 | 17 | 27 | 3 |
3221225473 | 3 | 30 | 5 |
75161927681 | 35 | 31 | 3 |
77309411329 | 9 | 33 | 7 |
206158430209 | 3 | 36 | 22 |
2061584302081 | 15 | 37 | 7 |
2748779069441 | 5 | 39 | 3 |
6597069766657 | 3 | 41 | 5 |
39582418599937 | 9 | 42 | 5 |
79164837199873 | 9 | 43 | 5 |
263882790666241 | 15 | 44 | 7 |
1231453023109121 | 35 | 45 | 3 |
1337006139375617 | 19 | 46 | 3 |
3799912185593857 | 27 | 47 | 5 |
4222124650659841 | 15 | 48 | 19 |
7881299347898369 | 7 | 50 | 6 |
31525197391593473 | 7 | 52 | 3 |
180143985094819841 | 5 | 55 | 6 |
1945555039024054273 | 27 | 56 | 5 |
4179340454199820289 | 29 | 57 | 3 |
勾股定理构造
$(\frac{n^2}{4}-1)^2+n^2=(\frac{n^2}{4}+1)^2$
$(\frac{n^2-1}{2})^2+n^2=(\frac{n^2+1}{2})^2$
几何
二维几何
三维几何
求两个平面的最短距离
1 |
|