首页 > 其他分享 >关于容斥原理 / P5505题解

关于容斥原理 / P5505题解

时间:2023-05-03 22:55:05浏览次数:35  
标签:方案 题解 P5505 容斥 合法 小球 binom 钦定

发现很多题解连容斥原理的“钦定”和“至少”的区别都讲不清楚,误导萌新,所以写一下这两个东西的区别

“钦定”这个东西是会算重的,而“至少”不会。

举个例子吧,比如 \(1\ 2\ 3\) 三个位置不合法,如果我说“钦定”两个位置不合法,那么这里计算方案的时候这个不合法的方案会被计算三次,分别是钦定 \(1\ 2\) 不合法、\(2\ 3\) 不合法,\(1\ 3\) 不合法,而“至少”有两个位置不合法这个方案只会被算一次。

某容斥入门题P5505的题解里面几乎没一个能看的,都在说“至少”,为了更清楚理解一下这个东西到底啥意思就从容斥原理的公式出发来推一下这题

题意是有 \(n\) 个盒子,\(m\) 种不同颜色的小球,每种小球有 \(k\) 个,问每个盒子里至少有一个小球(不论种类)有多少种放法

设 \(U\) 中元素有 \(n\) 种不同的属性,而第 \(i\) 种属性称为 \(P_i\),拥有属性 \(P_i\) 的元素构成集合 \(S_i\),那么

\[\begin{aligned} \left|\bigcup_{i=1}^{n}S_i\right|=&\sum_{i}|S_i|-\sum_{i<j}|S_i\cap S_j|+\sum_{i<j<k}|S_i\cap S_j\cap S_k|-\cdots\\ &+(-1)^{m-1}\sum_{a_i<a_{i+1} }\left|\bigcap_{i=1}^{m}S_{a_i}\right|+\cdots+(-1)^{n-1}|S_1\cap\cdots\cap S_n| \end{aligned} \]

考虑怎么算不合法方案数,假设 \(P_i\) 指的是第 \(i\) 个盒子没有放小球,\(S_i\) 指的是所有第 \(i\) 个盒子没有放小球的方案的集合
假设至少有 \(i\) 个位置不合法,从一开始放的时候就不考虑这 \(i\) 个盒子就好,也就是所有的球放方案的时候都不考虑这 \(i\) 个,也就是说有

\[\prod_{j=1}^{m}\binom{n+a_j-1-i}{n-1-i} \]

然而我们是要钦定 \(i\) 个位置不合法,那么这 \(i\) 个位置就有 \(\binom {n}{i}\) 种钦定法
最终如果钦定 \(i\) 个位置不合法的方案数就是

\[\binom{n}{i}\prod_{j=1}^{m}\binom{n+a_j-1-i}{n-1-i} \]

实际上用上面的 \(P_i\) 和 \(S_i\) 的定义考虑容斥的第 \(i\) 项很简单就推出来了,很容易发现如果要容斥一定是指定 \(i\) 个位置的 \(P_i\) 为真,然后把这几个 \(S_i\) 并起来,一共有 \(\binom{n}{i}\) 种并法,实际上就是 \(\binom{n}{i}\) 个钦定法
那么就有了不合法方案的公式

\[\sum_{i=1}^{n-1}(-1)^{i-1}\binom{n}{i}\prod_{j=1}^{m}\binom{n+a_j-1-i}{n-1-i} \]

所有方案插板法算算就好

\[\prod_{i=1}^{m}\binom{n+a_i-1}{n-1} \]

如果把答案的公式写在一起就是大部分题解的那个写法

所以基本上所有题解里面写的“至少”都是错的,考虑容斥原理的公式,“钦定”才是对的

标签:方案,题解,P5505,容斥,合法,小球,binom,钦定
From: https://www.cnblogs.com/lostintianyi/p/17369860.html

相关文章

  • [JOI 2016 Final]断层 题解
    题目链接首先发现斜着平移比较难处理,所以考虑将平面逆时针旋转\(45°\)。接着发现风化也不好处理,但是风化的一定不会作为答案,所以我们可以离线,然后倒着处理操作,上升变为下降。我们发现每个初始\(0\)点最后的坐标就是它正着做时初始的坐标,且每次操作都只会将连续一段点的\(......
  • 【23.05.03】好题题解
    好题题解A题目大意:计算一个项数为\(n\)的多项式除以\(x^3-x\)的余数多项式。数据范围:对于\(100\%\)的数据:\(2\leqn\leq2\times10^5\)解题分析:水题,直接多项式除法模拟即可。需要注意细节。ACCode:#include<bits/stdc++.h>usingnamespacestd;#d......
  • 【题解】ABC300 F,G
    F.MoreHolidays题目分析:考虑刻画一下我们选择是什么样子的。考虑我们最后选择的\(T\)中的一段一定是形如:一个完整的S选择一个后缀\(+\)若干个完整的S\(+\)一个完整的S的前缀。这样的话就启示我们直接枚举这个前后缀选择的是什么,然后就可以很快算出来了,但是枚举前......
  • [POI2005]SAM-Toy Cars 题解(贪心+堆)
    题面首先考虑一个贪心策略:当地板已经放满需要取出一个时,取下一次使用时间\(nxt\)最晚的那个。所以我们只需要一个可以快速求出一个集合中\(nxt\)最小的点并删除,插入新点的数据结构,这里很容易想到堆。代码很简洁,注意数组的下标是位置还是颜色(考场100pts到0pts)。code:......
  • Valhalla Siege 题解
    题目传送门一道二分题。先观察数据范围,\(1\len,q\le200,000\),显然需要\(O(n\logn)\)的复杂度。且\(1\lek_i\le10^{14}\),需要开longlong。我们需要二分到第一个血量大于伤害值的武士的位置,前面的武士都死了。而在C++算法库中,有一个函数upper_bound(底层原理是二分)正......
  • [蓝桥杯 2017 国 C] 合根植物 题解
    题目传送门一道并查集模板题。没什么好说的,先给个并查集模板,神犇可以直接跳过。查找根:intfind_root(intn){if(fa[n]==n)returnn;returnfa[n]=find_root(fa[n]);}合并:voidmerge(intx,inty){intsx=find_root(x),sy=find_root(y);......
  • Cashier 题解
    题目传送门一道贪心题。我们可以记录每一位客人离开的时间,当下一位客人来临时,他们之间空闲的时间就是我们休息的时间。for(inti=1;i<=n;i++){intt,l;cin>>t>>l;ans+=(t-endt)/a;endt=t+l;}最后再加上所有客人都走后的空闲时间......
  • [ABC213D] Takahashi Tour 题解
    题目传送门一道dfs序题。题目中高桥每次只会去最小的那个点,所以要先对整张图进行排序。for(inti=1;i<=n;i++)sort(g[i].begin(),g[i].end());然后考虑dfs。高桥不会走重复的点,所以我们可以开一个vis数组进行标记。然后我们需要处理高桥君如果无路可走会返回上......
  • Codeforces Round 869 (Div. 2) A-D题解
    比赛地址A.Politics题意:有n个人对m个决案进行投票,对于每一个决案如果票数相同则所有人都离场,反之票数少的一方离场,现在提前知道了每个人的意见,让一些人参与投票,在保证第一个人不离场的情况下最终剩余人数最多是多少Solution把和第一个意见不同的给去掉就行了voidsolve(){......
  • AT_abc106_d [ABC106D] AtCoder Express 2 题解
    题目传送门解题思路区间\(dp\)。划分阶段:以左右城市之间的列车数量为阶段。状态表达:设\(f_{i,j}\)为城市\(i\)与城市\(j\)之间的列车数量。状态转移:由图可知,城市\(l\)与城市\(r\)之间的列车数量,就是城市\(l\)与城市\(r-1\)之间的列车数量与城市\(l+1\)与......