容斥原理笔记
容斥原理的定义以及计算方式
- 容斥原理是十分有用的一种计算方法,通常用于子集统计中
- 该原理通过交替加减不同层次交集的大小,确保每个元素在并集中只被计算一次。虽然描述中的“只被两个集合重复的”可能指恰好属于两个集合的元素,但容斥原理实际处理的是所有交集(包含属于更多集合的元素),并通过后续的加减进行修正。
- 原理:整体减空白的思想,不过也有韦恩图的一点思想,当子集数量大于3时,就有些抽象了,这时我们就需要总结一下规律。
基本公式
以题目Count Good Numbers为例:
题目要求我们统计因子里不含2,3,5,7的所有在区间$[l,r]$里的数字总量(翻译成人话)
那么这不就是容斥原理吗?
1 | ll count_divisible(ll l, ll r, ll d) { |
- 主要思想:用二进制模拟是否要取得这一个集合,然后统计二进制中1出现的次数,即选择的集合数,来决定要加还是减。这样就大大减少了代码量,简单可维护性高。
备注:整体减空白的思想可以看华农的K题来学习,这里就不再列举了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZestfulYK的Blog!