一些常用的结论
1、Hall定理推论:最大匹配数=|X|-max(|W|−|next(W)|,……,0)
其中X是左部分的点集,|W|是X中的一个点集,N(W)为W的所有邻居(二分图上)
2、关于莫比乌斯反演
整出分块降复杂度
l=min(n(n/l),m/(m/l))r=l+1l不一定从1开始
莫比乌斯反演
F(n)=∑n|df(d)f(n)=∑n|dF(d)∗μ(dn)F(n)=∑d|nf(d)f(n)=∑d|nF(nd)∗μ(d)这些式子不能交换F和μ的位置d(ij)表示i∗j的约数个数和d(i∗j)=∑x|i∑y|j[gcd(x,y)==1]
证明:
d(i∗j)=∑x|i∑y|j[gcd(x,y)==1]
我们考虑把每个因子一一映射。
如果i∗j的因子k中有一个因子pc,i中有因子pa,j中有因子pb。我们规定:
- 如果 c≤a,那么在 i中选择。
- 如果 c>a,那么我们把c减去a,在j中选择pc−a(在 j 中选择 pe 表示的是 pa+e)
对于 i∗j的因子 k 的其他因子同理。于是对于任何一个 k 有一个唯一的映射,且每一个选择对应着唯一的 k。
通过如上过程,我们发现:对于 i∗j 的因子 k=∏pici,我们不可能同时在 i和 j中选择 pe(优先在 i 中选择,如果不够就只在 j 中选择不够的指数),故 x 和 y 必须互质。
等式得证。----from Luogu Siyuan
一些经验:杜教筛递归时尽可能减少递归次数
杜教筛常用技巧
μ∗I=eμ∗Id=φφ∗I=Id上面是卷积n∑i=1i=n∗(n+1)2n∑i=1i2=n∗(n+1)∗(2∗n+1)6n∑i=1i3=(n∑i=1i)2=(n∗(n+1)2)2
杜教筛套路:
S(n)=∑i=1f(i)n∑i=1(f∗g)(i)=n∑i=1∑d|if(d)g(i/d)=n∑d=1g(d)∗∑d|if(id)=n∑d=1g(d)∗⌊nd⌋∑i=1f(i)g(1)S(n)=n∑i=1(f∗g)(i)−∑i=2g(i)S(⌊ni⌋)这个式子就是常用的了
遇到过的一个模型:
f(i)=φ(i)i2,我们令g(i)=i2n∑i=1(f∗g)(i)=n∑i=1∑d|iφ(d)∗d2∗(id)2=n∑i=1i2∗∑d|iφ(d)=n∑i=1i3g(1)S(n)=∑i=1(g∗f)(i)−∑i=2g(i)S(⌊ni⌋)f(i)=φ(i)i同理,令g(i)=i(f∗g)(i)=i2
结论补充:
n∑i=1[gcd(i,n)==1]i=φ(n)∗n+[n==1]2证明:当n≥2时,若gcd(i,n)==1则有gcd(n−i,n)==1,而与n互质的数有φ(n)项,那就是一个首项加末项∗项数/2记得特判n=1
由莫比乌斯函数前缀和性质:
n∑i=1∑d|iμ(d)=1n∑i=1μ(d)⌊nd⌋=1
关于求逆元:如果有n个已知的待求逆元的数,可以用类似求阶乘的方法预处理出每个数的逆元 O(n)
3、inplace_merge函数
包含在 algorithm 头文件
一个数组a,假设存在分界点mid,保证mid两端排序方式相同
使用:inplace_merge(a+L,a+mid,a+R,cmp)
cmp没有默认按值升序,
操作区间:[a+L,a+mid),[a+mid,a+R),左开右闭
inplace_merge,在分配缓存成功时,时间复杂度O(M+N),空间复杂度看分配的缓存,即可能为O(M),O(N)或O(M+N),否则,时间复杂度为O(Nlog(N)),空间复杂度为O(1)
保证合并的两个部分的原有元素顺序不
4、二项式定理
(nm)=n!m!∗(n−m)!F(n)=n∑i=0(ni)G(i)反演:G(n)=n∑i=0(−1)n−i(ni)F(i)F(n)=n∑i=k(ik)G(i)反演:G(n)=n∑i=k(−1)i−k(ik)F(i)
来看一些二阶(?)的情况
f(n,m)=n∑i=0m∑j=0(ni)(mj)g(i,j)g(n,m)=n∑i=0m∑j=0(−1)n−i+m−j(ni)(mj)f(i,j)−−−−分割线−−−−f(i,j)=n∑x=im∑y=j(xi)(yj)g(x,y)g(i,j)=n∑x=im∑y=j(−1)x−i+y−j(xi)(yj)f(x,y)
5、常见的定义
完全祖先/后代:不包括自身的祖先/后代
6、一堆结论
在一个半径为R的圆内等概率走,欧几里得距离的平方的期望是R22
S=n∑i=1i∗[gcd(i,n)=1]S+S=n∑i=1i∗[gcd(i,n)==1]+n∑i=1(n−i)∗[gcd(n−i,n)==1]=n∗φ(n)S=(n∗φ(n)+[n=1])/2
欧拉函数√n时间内利用积性函数性质求,φ(pk)=pk−pk−1,还可以提前筛出质因子加速51nod1363
可以用来化式子 ⌊x2⌋+⌈x2⌉=x
定义一个新函数msf(n)=maxd2|n d,即n的最大平方因子,容易想到有:
μ(n)2=[msf(n)==1]=∑d|msf(i)μ(d)d|msf(i)等价于d2|i如果外面还有其他项,就可以通过变换推式子了 loj6181讨论区
一个超大质数(hash防冲突?)
10000000000000061=1e16+61
欧拉回路注意起点的循环同构现象
7、不太常用的latex公式
→
⋅
∈
N
±
≠
∞
3√6
⇔
21X左部上下标
屏幕放大或缩小ctrl+shift+ 上面一排那个数字后面的+ - 号
8、决策单调性优化:四边形不等式
称一个二维序列f满足四边形不等式,当且仅当:∀a<b≤c<d,a,b,c,d∈N+,fa,d+fb,c≥fa,c+fb,d
推导:
∀a<b,a,b∈N+,fa,b+1+fa+1,b≥fa,b+fa+1,b+1
fa,b+1−fa,b≥fa+1,b+1−fa+1,b
fa,b+1−fa,b≥fa+i,b+1−fa+i,b
最后有这个结论:fa,b+j−fa,b≥fa+i,b+j−fa+i,b
9、斐波拉契数列(我的弱项)
广义(?)斐波拉契数列:
5,−3,2,−1,1,|0,1,1,2,3,5对于i<0 fi=−1i+1f−i
斐波拉契数列
F0=0,F1=1Fn=FkFn−k+1+Fk−1Fn−kFn=F2Fn−1+F1Fn−2=Fn−1+Fn−2F2k−1+Fk−1Fk−F2k=(−1)k
矩阵乘法:矩阵乘法只满足结合律,不满足交换律
初始矩阵∣∣∣1110∣∣∣单位矩阵∣∣∣1001∣∣∣初始矩阵可以看作∣∣∣f2f1f1f0∣∣∣初始矩阵的n次方∣∣∣fn+1fnfnfn−1∣∣∣
要背的结论:在mod 1e9+9的意义下,√5的二次剩余是383008016
斐波拉契数列的生成函数F(x)=x1−x−x2
卡特兰数的生成函数H(x)=1−√1−4x2x,H(0)=1
牛顿二项式定理:
(nk)=rk––k!r∈C(复数域),k∈N(1+x)α=∑n>=0(αn)xn
普通生成函数(OGF)
对于an=<1,2,3,4...>F(x)=∑n≥0(n+1)xn=∑n≥1nxn−1=∑n≥0(xn)′=(11−x)′=1(1−x)2对于an=(m+nn)F(x)=∑n≥0(n+mn)xn=1(1−x)m+1对于an=<1,0,1,0,1,...>F(x)=∑n≥0x2n=11−x2同理an=<0,1,0,1,0...>F(x)=∑n≥0x2n+1=x1−x2
指数生成函数(EGF)
F(x)G(x)=∑i≥0aixii!∑j≥0bjxjj!=∑n≥0xnn∑i=0aibn−i1i!(n−i)!=∑n≥0xnn!n∑i=0(ni)aibn−i∑n≥0xnn!=ex∑n≥0anxnn!=eax(整体代换理解)
长度为n的排列数的EGF
F(x)=∑n≥0n!xnn!=∑n≥0xn=11−x
n个数的圆排列的EGF(第一类斯特林数——列)
G(x)=∑n≥1(n−1)!xnn!=∑n≥1xnn=−ln(1−x)=ln(11−x)
容易发现exp(G(x))=F(x),可以理解成一个排列的数i向realposi连边,形成若干个置换环
错排数,不存在在长度为1的置换环
∑n≥2xnn=−ln(1−x)−xAns(x)=exp(−ln(1−x)−x)
get新姿势:51nod1728,一个不可重集大小为s,构造映射函数f(i)=j,一组递归函数可解当且仅当在有限次操作后存在f(f(f(...f(x)...))=x′,f(x′)=x′可解的递归函数恰好有(s+1)s−1种
不动点
<Empty Math Block>
10、斯特林数总结(我的弱项)
上升幂
x¯¯¯n=x∗(x+1)∗(x+2)...∗(x+n−1)=(x+n−1)!(x−1)!
下降幂
xn––=x∗(x−1)∗(x−2)...∗(x−n+1)=x!(x−n)!
上升幂下降幂的转换
xn––=(−1)n(−x)¯¯¯nx¯¯¯n=(−1)n(−x)n––
第一类斯特林数S1(n,k)表示的是将n个不同元素构成k个圆排列的数目,
其中一个应用:划分数字后每个划分取最值(圆排列)的排列数
[nk]=[n−1k−1]+(n−1)∗[n−1k]
第二类斯特林数S2(n,k)表示的是把n个不同元素划分到k个集合的方案数(组合数)
{nk}={n−1k−1}+k∗{n−1k}
第二类斯特林数的应用:组合数意义(超重要)
nm=m∑k=0{mk}(nk)k!
m个数∈[1,n],有nm种方案,枚举有k个不等价类各有多少方案
二项式反演一下
k!{mk}=k∑i=0(−1)k−i(ki)im
推式子可以用到的结论:
求杨辉三角一列的和
R∑i=L(iL)=(R+1L+1)
m∏i=1(1−ix)=reverse(m∏i=1(x−i))
快速求第二类斯特林数——行
{mk}=1k!k∑i=0(−1)k−ik!i!(k−i)!im=k∑i=0(−1)k−i(k−i)!imi!
第二类斯特林数——列(EGF)
k!∞∑i=0xii!=(ex−1)k
关于第二类斯特林数——列(EGF)提供,另一种分治写法
H(n)=∑i{in}xi=∑i(n{i−1n}+{i−1n−1})xi=n∑i{i−1n}xi+∑i{i−1n−1}xiH(n)=nxH(n)+xH(n−1)H(n)=x1−nxH(n−1)H(n)=xn∏i1−ixH(0)=1
斯特林数与阶乘之间的关系
通常幂转下降幂(第二类斯特林数)
nm=m∑k=0{mk}(nk)k!=m∑k=0{mk}nk––
上升幂转第一类斯特林数
x¯¯¯n=n∑k[nk]xk
第一类斯特林数——行(倍增)
O(2nlogn)由上升幂转通常幂可知,我们要求x¯¯¯n考虑x¯¯¯¯¯¯2n=x¯¯¯n(x+n)¯¯¯n如果知道f(x)可以推出f(x+k),然后二项式定理拆开这个OGF发现可以ntt优化
第一类斯特林数——列
先提供一种分治O(nlog2n)做法
套路:1个第一类斯特林数的母函数是f,则k个的母函数是fk
设单个圆排列的EGF是f=∑(i−1)!xii!=∑xii,对这个倍增做log(k)次长度位n的ntt就可以了
补个最后操作的式子 n!k!∏∑ai=n(ai−1)!ai!
补个坏消息,被卡了.其他写法先鸽这吧
斯特林反演
f(n)=n∑k=0{nk}g(k)⇔g(n)=n∑k=0(−1)n−k[nk]f(k)
互逆操作
n∑k=m(−1)n−k[nk]{km}=[n==m]n∑k=m(−1)n−k{nk}[km]=[n==m]
下降幂推导,证明考虑ji整体下移
(j−1)i−1––––=ji–−(j−1)i–i
11、多项式推式子用
由泰勒展开:ex=∞∑i=0xii![xk]表示多项式中xk这一项的系数n∑v=0vk=n∑v=0[xk]evx,这里可以等比数列求和
ln(11−(ax)v)=∞∑j=11j(ax)vj先求导再积分的结果
麦克劳林级数
∞∑i=0xii!=ex
定和取模中学到的技巧 gym102586e Count Modulo 2
对于多项式f(x)和质数p:fp(x)≡f(xp) (mod p)展开归纳可得类似还有fpk(x)≡f(xpk) (mod p)
∑i=0xi=11−x中的x可以整体替换成替他值,例如ax,x+x2
12、凸包
叉积:给定两个向量→a=(x1,y1),→b=(x2,y2),→a×→b=|→a|×|→b|×sinθ=x1y2−x2y1
凸包上应用:
→a×→b>0等价于→b在→a的逆时针180度内
→a×→b<0等价于→b在→a的顺时针180度内
→a×→b=0等价于→b和→a共线(同向或反向)
叉积和三角形面积:
S=12→a×→b=12|→a|×|→b|×sinθ=12(x1y2−x2y1)
应用:解析几何和计算几何(计算凸包直径:旋转卡壳)
一般使用叉积建议把角度控制在180度内方便理解和处理
wqs二分:费用流是凸的.
13、高精度
含大数组的结构体(如高精)不要定义太多次,多写重载,调用∗this
14、树的性质
直接在nn−2种树(prufer序列)里面随机树高是O(√n),
如果用给2 ~ n依次在1 ~ i−1里随机一个父亲,则树高期望是O(log(n)),这种建法的方案数是(n−1)!
对于树(森林):连通块个数=点数-边数
最小生成树:平面图和其对应的对偶图的MST数量相等,因为每一个平面图的生成树可以映射到对偶图上。具体的:对偶图上夹着平面图生成树边的两个平面不能通过这条边相连.
树的直径性质:设树上一个点集的直径端点为a,b,另一点集的直径端点为c,d,则两个点集的并的直径端点必然是a,b,c,d其中两个
如果一棵子树里钦定某个点i做根,概率是1szi,这个可以扩展到加权的情况,如果一个序列里要求一个数i在最前面出现,则有概率是vali∑val
15、图
平面图性质:m≤3n−6(边数≤点数*3-6)
欧拉定理:
对于连通图:V+F−E=2(点数+面数-边数=2)
对于仙人掌(森林):连通块个数=点数-边数+环数
16、字符串
结论:一颗无根树上任意一条路径必定可以在以某个叶节点为根时,变成一条从上到下的路径(利于广义 SAM 的使用)
17、计数问题
对于图上两点(a,b),(c,d),如果是一般的往右和往上移动,方案数为
(c−a+d−bc−a)
但如果是往4个方向移动len步,对坐标轴旋转45度,方案数则为
(len12(len+c−a+d−b))∗(len12(len+c−a+b−d))
应该也可以组合数枚举len步内的其中三个方向操作的位置
18、 FWT(快速沃尔什变换)
思来想去决定背下来
首先要让数组长度是2n,若n=0
FWT(A)=A
对于任意运算符号都有,同时都满足结合律和交换律
FWT(A+B)=FWT(A)+FWT(B)=2i∑j=1Aj+Bj
按位或:
FWT(A)=FWT(A0),FWT(A0+A1)UFWT(A′)=UFWT(A′0),UFWT(A′1−A′0)
A0,A1是2i−1时的答案,操作时认为A0是2i的低位部分,A1是2i的高位部分,这里的操作可以看成把数组前后两部分顺序接起来
按位与:
FWT(A)=FWT(A0+A1),FWT(A1)UFWT(A′)=UFWT(A′0−A′1),UFWT(A′1)
亦或:
FWT(A)=FWT(A0+A1),FWT(A0−A1)UFWT(A′)=UFWT(A′0+A′1)2,UFWT(A′0−A′1)2
同或:(字面意思)
FWT(A)=FWT(A1−A0),FWT(A1+A0)UFWT(A‘)=UFWT(A′1−A′0)2,UFWT(A′1+A′0)2
19、建图小技巧
遇到奇怪的建图方法可以考虑借鉴分层图,运用一种电梯升降的写法把边权间的关系表现出来,具体来说要在电梯的每一层提供足够的可行转移,提供一层转入,一层转出,可能再有一层中转.
另外还有笛卡尔树,K-D tree,线段树,主席树优化建图,用于处理一些特殊的问题
20、树状数组维护等差数列(痛点)
没事,暂时可以用线段树维护,记住我的维护方法首项是0,区间覆盖时要手算一下
21、扩展欧拉定理
一般的欧拉定理 对于质数p,有aφ(p)≡1(mod p)
扩展欧拉定理,考虑对任意正整数p取模,a是任意整数
如果gcd(a,p)=1,有ax≡ax mod φ(p)
如果gcd(a,p)≠1,有ax≡ax mod φ(p)+φ(p),
可以简写成ax≡ax mod φ(p)+φ(p) (mod p),上式成立前提是x>=φ(p)
22、好用的编译命令
g++配置:windows中输入“系统变量”——>“环境变量”——>“Path”(”Stu的用户变量“,也可以带上“系统变量”)——>“新建”——>C:\Program Files (x86)\Dev-Cpp\MinGW64\bin 复制这段
一些编译命令:
g++ -v(这是一个返回参数,一般题目会给)
fc 文件比较(一般对拍用)
cd 跳转到某个目录(如 cd C:\Program Files (x86)\Dev-Cpp\MinGW64\bin )
cd.. 跳到上一个目录
鼠标右键可以粘贴
对拍时直接调用exe文件,如果对拍结果闪掉(窗口出结果后直接关)可以考虑在交互库加上.out的文件输出
23、矩阵树定理
矩阵树定理求的是:
∑T∏e∈Twe
变元矩阵树定理:
把度数矩阵设成与i相连的边的权值
把邻接矩阵设成边权负值
24、奇知增
devc++里的英文输入法要用"半角"
25、最小割树
先记结论:类似于分治,在当前点集种选择任意两个点作为源点、汇点,跑最小割G
两个点之间连树边,边权为G
把当前点集中和S连通的放进一个集合,和T连通的放进一个集合,分治下去
注意:每次跑最小是在全局跑,有n−1次最小割(n−1跳边)
建出树之后,任意两点的最小割,就是两点树上路径的边权最小值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】