1. 程式人生 > >容斥原理題目總結

容斥原理題目總結

多少 容斥 $? through bzoj2839 答案 -s 位置 不同

這種神仙東西菜雞果然學不來

1.[BZOJ2440]完全平方數

題意:詢問第k個無平方因子數

二分一個數$x$,那麽他在他在整個序列中的位置就是$x$-含一個質因數的平方的因子的數+含兩個質因數的平方的因子的數$\cdots$

可以發現容斥系數正是$\mu$函數,所以就變成了$\sum_{i=1}^{\lfloor\sqrt{x}\rfloor}\mu(i)\frac{x}{i*i}$

2.[BZOJ2863]憤怒的元首

題意:詢問$n$個點的圖中$Dag$的個數

設$f_i$表示$i$個點的組成$Dag$的個數,$g_i$表示至少$i$個點入度為0的個數

因為$Dag$去掉若幹個出度為$0$的點仍為$Dag$,所以可求得:

$g_i=f_{n-i}\binom{n}{i}2^{i(n-i)}$

怎麽求出來的?可以這讓考慮,我們首先選出來$i$個點,強制它們的出度為$0$,因為剩下的$n-i$點向它們連邊後仍為$Dag$,所以枚舉這$i(n-i)$條邊連不連

求出來$g_i$之後,根據容斥的套路求$f_i$:

$f_i=\sum_{j=1}^i(-1)^{j-1}g_j$

3.[BZOJ2839]集合計數

題意:一個有$n$個元素的集合有$2^n$個不同子集(包含空集),現在要在這$2^n$個集合中取出若幹集合(至少一個),使得它們的交集的元素個數為$k$,求取法的方案數

我們枚舉它的交集$k$,一共有$\binom{n}{k}$種方案,然後剩下的無論怎麽取交集一定為空

交集空集=總數-至少一個交集+至少兩個交集-$\cdots$

則答案可表示為$ans=\binom{n}{k}\sum_{i=0}^{n-k}(-1)^i\binom{n}{i}(2^{2^{n-i}}-1)$

4.[BZOJ3622]已經沒有什麽好害怕的了

題意:給出兩數列$A$,$B$都有$n$個元素, 元素兩兩互不相同, 問有多少種方案使得恰好($a[i]>b[j]$的數目)$-$($a[i]<b[j]$的數目)$= k$?

轉化一下問題,設有$x$對$a_i>b_j$,那麽$x-(n-x)=k$,解得:$x=\frac{n+k}{2}$,所以我們應該求出恰好$x$對$a_>b_j$的個數

一眼是容斥,不過並不影響我不會做。首先根據套路,我們顯然是要求出至少有$i$對$a_i>b_j$

一般來說,容斥題目中所謂至少就是先固定住$i$個而讓剩下的隨便選,所以我們設$dp_{ij}表示選了$i$對至少有$j$對$a>b$的方案數

如果做過一個叫$RabbitNumering$的題就知道這個$dp$應該在排好序後做,我們設$s_i$表示比$a_i$小的$b$的數目

然後轉移方程即為$dp_{ij}=dp_{i-1j}+dp_{i-1j-1}*(s_i-j+1)$

$f_i$表示恰好有$i$對$a>b$的方案數$g_i$表示至少有$i$對$a>b$的方案數

因為我們是固定$i$對$a>b$,剩下的隨意匹配,所以有:$g_i=dp_{ni}*(n-i)!$

考慮$f_i$在$g_j$($i>=j$)中出現了$\binom{i}{j}$次,就有$g_i=\sum_{j=i}^{n}\binom{j}{i}f(j)$

根據二項式反演得:$f_i=\sum_{j=i}^n(-1)^{(j-i)}\binom{j}{i}g_j$

容斥原理題目總結