「数学」助力每一个不知死活的容斥梦
容斥原理
结论
假设现在有
这个公式就是容斥原理的内容。
我们可以将容斥原理应用到计数问题。就好比你有
举一个简单的例子:
P1595 信封问题(错排问题)
某人写了
封信和 个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。
我们发现要求的答案就是所有的全排列
我们设计
这个式子里要处理的交集并不好直接计算。我们发现后面的交集大小之和其实就是在
那么答案就是:
例题
[ARC101E] Ribbons on Tree
如果你硬做 DP 的话,你会发现无论怎么搞都不好优化,根据强大的正难则反原则,我们考虑容斥,用所有可能的配对方案减去不合法的方案。
前者先不管,后者我们就可以想办法定义若干个集合
代入容斥的式子后,你会发现重点还是在于求任选
要在一个大小为
如果我们设
我们可以跳出容斥中枚举
具体地,我们枚举
-
若
这条边不删,则 。 -
若
这条边要删,则 ,这里的 便是一个系数,因为此时我们多删了一条边,那么根据容斥里每一项的系数,我们现在就要多乘一个 上去。
那么我们的答案就是
[PA2019] Trzy kule
本题不需要使用容斥公式,它只是代表了容斥这样类似的正难则反思想。
我们的目标要让三个条件中至少满足一个,但是这样的话考虑的情况会很复杂,因此我们需要转换思想,求出三个条件都不满足的情况。
根据观察,我们可以发现当第
为了使三个条件都不满足,我们肯定只会分别在四种状态中选择若干个去对
那么就有:
我们考虑枚举
算上
我们简记为
Small Permutation Problem (Hard Version)
这是一个另类的容斥题型:就是将排列问题转换为棋盘问题,然后在棋盘上进行容斥。
具体地,想象一个
如果没有
- 若
,则不需要放棋子,对答案无贡献。 - 若
,则我们考虑在矩形边缘选位置,第 行可以放 个,第 列也可以放 个,除去 重复的部分,我们就有 种方案。在这里因为我们放了棋子,所以我们需要让 。 - 若
,则我们显然不能在 处放置棋子,因为这样的话第 行,第 列都不能放棋子了。那么方案数就是 ,令 。
每次拓展
现在我们考虑有
但是我们不好处理这个问题,因此考虑容斥,先在
设
为了方便表示,设
接下来设
用总方案数减去上面的式子就行了。
若要求总的答案是多少的话,我们直接对于每个容斥的结果求积就行了。
二项式反演
结论
二项式反演是容斥拓展形成的数学工具。
我们设
既然有
证明:
因此,对于“恰好”形式的问题,我们可以设计两个数组
相关推论
整理了一下关于二项式反演的推论:
例题
Positions in Permutations
【恰好】在计数题中是一个非常棒的词,它启示我们用二项式反演,转而去思考如何求【钦定】类的问题。即求出
容易发现一个情景:如果要同时使得
结合
为了方便转移,我们把未钦定是否为完美数的数的阶乘提出来,即
转移的话,先考虑让
- 若
,则需保证 这个数没有被填过。而此时 显然没有被填过, 填不填不会影响 是完美数,因此 且 。 - 若
,则 这两个数是否被填不会产生影响,因此 且 。
再考虑
设
预处理组合数和阶乘即可。
已经没有什么好害怕的了
对于差值的【恰好】貌似不太好处理,我们将题意转换一下,设糖果能量大于药片的配对数量为
【恰好】转换为【钦定】。我们设
-
如果让第
个糖果去配对一个比它大的药片,那么就不会产生贡献, 。 -
如果让第
个糖果去配对一个比它小的药片,那么就会产生贡献。考虑会有多少个比它小的药片,由于原数组已经排序,我们可以求出所有药片中比它小的数量为 ,由于我们已经将糖果排了序,前面有 个糖果已经配到了 个更小的药片,那么 就只剩下了 个可能的配对对象,因此 。
注意到我们的 DP 不考虑内部不满足条件的随机组合,因此上面的第二种转移不需要考虑
输出
Timber
先思考如何判断一个合法的初始局面,我们可以贪心一下,从前往后枚举每一棵树,如果这棵树可以向左倒就向左倒,如果不行就向右倒,这样下去如果存在一个点被多次覆盖,那么这个初始局面就是不合法的。
因此我们可以设计一个
考虑从
-
若第
棵树的位置为 ,则它是向左倒的,只需要满足 即可,因此 。 -
若第
棵树的位置为 ,则它是向右倒的,根据贪心策略,此时 一定不能向左倒,那么就有 ,即 ,因此 。
考虑转换一下思路,这个 DP 的本质就是在处理前
因此我们设
根据反演公式,我们只需要求出
则总答案为:
其中第四行到第五行的转换是二项式定理。最后的式子我们就可以直接
莫比乌斯反演
莫比乌斯函数
我们定义一个定义域为正整数的函数
莫比乌斯函数是一个积性函数。
莫比乌斯函数也满足下面这个性质:
结论
莫比乌斯反演具有两种不同的形式:
例题
YY的GCD
莫比乌斯函数的入门题。
题目要求
根据莫比乌斯函数的性质:
考虑枚举
后面那个求和显然可以预处理,我们枚举每一个质数
最后,由于存在
Winter is here
设值域上界
遇事不决推式子:
我们设
我们可以对每一个
我们发现枚举的
Relatively Prime Powers
考虑一个性质:若一个数
我们设
我们要求的答案即为
根据性质,若一个数
不过 CF 好像会卡 pow
的精度,我们就先用 pow
来求一次
Min-Max 容斥
结论
有一个全集
对于第一个等式的证明:
不妨设
中的元素互不相同,若 中存在相同元素则以编号为序。接着,我们让 中元素从小到大排序,设排序后第 个数为 。 对于一个
的子集 ,令 中的最大值为 。
- 若
,则 ,有 。 - 若
,则 ,我们在 中钦定 这个值必然存在,剩余的 个数可选可不选,因此可能的 的数量有 个。由于 ,则 为奇数和偶数的概率相等,两种答案便会因为 的差异被完全抵消。 综上,第一个等式成立。
对于第二个等式的证明同理。
但是光是这个等式是没有什么大用的。我们还存在另一种结论:这两个等式在期望最大值最小值的情况下同样成立,即:
扩展 Min-Max 容斥
定义
对于第一个等式的证明:
由于
值给定,我们设一个集合 对应的贡献式子的系数为 ,即: 我们让全集
中元素从大到小排序,设排序后第 个数为 。设 中最小值为 ,枚举 中被选入 中的数为 ,则 的贡献次数为 。为了使得最终的答案为 ,我们需要使得: 令
,则上式构成二项式反演结构,已知 的关系式,则能够得到 的关系式: 因此原式成立。
其余证明同理。
例题
Card Collector
翻译一下题意:有
注意这里的
我们可以分开考虑,设
因此我们的问题最后转换为,对任意一个集合
最后对每个集合求和即可。
[HAOI2015] 按位或
设
那么问题就转换为:对于每个集合
这个时候我们就可以用到 FMT 快速莫比乌斯变换了,FMT 可以快速求出每个集合的子集和。
考虑到小数运算的误差,我们判断大小关系的时候最好加上一个 eps
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现