[OI] 容斥原理拓展
10.容斥原理拓展
10.1 二项式反演
\]
设 \(U=\{S_1,S_2,S_3...S_n\}\),且任意 \(i\) 个元素的交集都相等
定义 \(g(x)\) 为 \(x\) 个集合的交集,\(f(x)\) 为 \(x\) 个集合补集的交集(定义 \(f(0)=g(0)=U\)),则:
\]
可知对 \(g(i)\),符合要求的 \(f(i)\) 组合共有 \(C^{i}_{n}\) 种,即原式可以化为:
\]
同理有
\]
因为
\]
因此得出结论:
\]
\]
因为
\]
因此
\]
当 \(j\neq n\) 时,原式值为 \(0\),否则值为 \(1\).
当 \(g(n)=\sum\limits^{n}_{i=0}(-1)^{i}C^{i}_{n}f(i)\iff f(n)=\sum\limits^{n}_{i=0}(-1)^{i}C^{i}_{n}g(i)\) 成立时,可以推知
\]
该式末项 \(\sum\limits^{n}_{i=j}\{(-1)^{i}\times C^{i}_{n}\times(-1)^{j}\times C^{j}_{i}\}\) 已有上述结论,故当 \(j\neq n\) 和 \(j=n\) 时分别带入讨论,发现原式均成立,证毕.
事实上,二项式反演还有一个更常用的推导式:
\]
根据二项式反演的性质,我们通常会构造一组 \(\{ f(i),g(i)\}\),使得两者之间存在包含关系并且有一者很方便求出,通过反演来快速得到另一者的值.
二项式反演还有其他形式:
\]
\]
10.2 Min-Max 容斥
对于满足全序关系并且其中元素满足可加减性的序列 \(\{x_i\}\),设其长度为 \(n\),并设 \(S=\{1,2,3,\cdots,n\}\) ,则有:
\]
\]
一个常用的实际应用为 Min-Max 容斥的低维版本:\(\min(a,b)=a+b-\max(a,b)\)
证明略.
10.3 错位排列
满足 \(\forall i\neq a_{i}\) 的排列被称为错位排列.
10.3.1 公式
套用补集的公式,问题变成求
\]
可以知道,\(\overline{S_i}\) 的含义是满足 \(P_i=i\) 的排列的数量。用容斥原理把问题式子展开,需要对若干个特定的集合的交集求大小,即:
\]
其中省略了 \(a_i<a_{i+1}\) 的条件以方便表示
上述 \(k\) 个集合的交集表示有 \(k\) 个变量满足 \(P_{a_i}=a_i\) 的排列数,而剩下 \(n-k\) 个数的位置任意,因此排列数:
\]
那么选择 $k4 个元素的方案数为
\(C^{k}_{n}\),因此有:
\left|\bigcup_{i=1}^n\overline{S_i}\right|
&=\sum_{k=1}^n(-1)^{k-1}\sum_{a_{1,\cdots,k} }\left|\bigcap_{i=1}^{k}S_{a_i}\right|\\
&=\sum_{k=1}^n(-1)^{k-1}C^{k}_{n}(n-k)!\\
&=\sum_{k=1}^n(-1)^{k-1}\frac{n!}{k!}\\
&=n!\sum_{k=1}^n\frac{(-1)^{k-1} }{k!}
\end{aligned}\]
因此 \(n\) 的错位排列数为:
\]
10.3.2 递推式
\]
\]
待证明
10.4 Catalan 数
1 1 2 5 14 42 132
\]
关于 Catalan 数的常见公式:
\sum_{i=1}^{n} H_{i-1} H_{n-i} & n \geq 2, n \in \mathbf{N_{+}}\\
1 & n = 0, 1
\end{cases}\]
\]
\]
[OI] 容斥原理拓展的更多相关文章
- [luogu4478 BJWC2018] 上学路线 (容斥原理+拓展lucas)
传送门 Description 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路 ...
- 告别我的OI生涯
本文章写于2008年12月15日. 随着2008noip的结束,我也结束了我的OI生涯. 信息竞赛也许是从小到大让我最最努力的一件事.我记得参加2006noip初赛前,每天中午为了上信息课都吃不上中午 ...
- 收集一些关于OI/ACM的奇怪的东西……
一.代码: 1.求逆元(原理貌似就是拓展欧几里得,要求MOD是素数): int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * ...
- OI分类
黑字:认识 红字:要学 未添加:要学 ├─模拟├─字符串│ ├─字符串基础│ ├─manacher│ ├─kmp│ ├─trie│ ├─ac自动机│ ├─后缀数组( ...
- [技术]浅谈OI中矩阵快速幂的用法
前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...
- OI暑假集训游记
莞中OI集训游记 Written BY Jum Leon. I 又是一载夏,本蒟蒻以特长生考入莞中,怀着忐忑的心情到了8月,是集训之际.怀着对算法学习的向往心情被大佬暴虐的一丝恐惧来到了 ...
- 2017.12.10《“剑锋OI”普及组多校联盟系列赛(14)#Sooke#Kornal 的课余时间 》分析报告
报告内容如下 - - [导语] ------ 太晚了,时间也紧,一切尽量从简吧 PS:本文题目来自剑锋OI 所以废话也不多说,进入正题吧,代码直接跟在题目后边儿,主要分析在代码前,次要的就写在代码后面 ...
- OI中的莫比乌斯反演
OI中的莫比乌斯反演 莫比乌斯函数 想要学习莫比乌斯反演,首先要学习莫比乌斯函数. 定义 莫比乌斯函数用\(\mu(x)\)表示.如果\(x\)是\(k\)个不同质数的积,则\(\mu(x) = (- ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- OI中组合数的若干求法与CRT
OI中组合数的若干求法与CRT 只是下决心整理一下子呢~ 说明:本篇文章采用\(\binom{a}{b}\)而不是\(C_{a}^b\),以\(p\)指代模数,\(fac_i\)指代\(i!\),\( ...
随机推荐
- 如何安装 Arch Linux 操作系统?
Arch Linux Install 安装 到使用 Arch 说明前面或多或少已经接触过 Debian 系列和 Red Hat 系列相关 Linux 发行版,对于虚拟化软件 VirtualBox 如何 ...
- Java 线程池之ThreadPoolExecutor学习总结
前提 java version "1.8.0_25" 池简述 软件开发活动中,我们经常会听到数据库连接池.内存池.线程池等各种"池"概念,这些"池&q ...
- OpenGL 4.0中数据缓冲VBO,VAO,EBO的使用总结
Opengl是大家常用的一个API,我们用它绘制数据的时候需要使用vao,vbo,ebo等对象,绘制方式分为 vao绘制,ebo绘制等.使用不同api还能分为普通调用以及Instance绘制. 首先申 ...
- nginx的一些功能
一.四层(tcp/udp)代理 由于nginx默认是不支持四层代理的因此在安装的时候需要加上对应的模块with-stream ./configure --with-stream # 查看当前nginx ...
- Activity活动生命相关
启动与结束 页面跳转: startActivity(new Intent(this,xxxx.class)); 关闭当前界面返回上一界面 finish(); //这里我在使用finish遇到一个问题, ...
- 【Dos-BatchPrograming】01
--0. 1.文件后缀的延申 官方教程更推荐使用.cmd作为后缀 .cmd和.bat的区别: http://www.360doc.com/content/12/0810/09/3688062_2293 ...
- 【ECharts】02 饼图
饼状图: <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="width: 600px;he ...
- MindSpore 数据加载及处理
参考地址: https://www.mindspore.cn/tutorial/zh-CN/r1.2/dataset.html ==================================== ...
- git 如何删除一个文件名为nul的文件
前提 当我发现存在一个nul的文件,手动删除/移动它,都会提示ms-dos功能无效或文件过大.想一想这个nul应该是某个保留字,所以普通的方式不能删除 解决方案 https://stackoverfl ...
- Codeforces Round 964 (Div. 4)
Codeforces Round 964 (Div. 4) A送分 B 大意:两个人两张牌 随机翻 求a翻出来的牌比b大的可能 #include <cstdio> #include < ...