BZOJ2839 集合計數 容斥原理 組合數

2022-08-05 05:57:10 字數 730 閱讀 1008

乙個有n個元素的集合有2n個不同子集(包含空集),現在要在這2n個集合中取出若干集合(至少乙個),使得

它們的交集的元素個數為k,求取法的方案數,答案模1000000007。(是質數喔~)

一行兩個整數n,k

一行為答案。

3 2【樣例說明】

假設原集合為

則滿足條件的方案為:,,,,,

【資料說明】

對於100%的資料,1≤n≤1000000;0≤k≤n;

恰好xx的問題,很大機率是容斥。。。

冷靜分析一下,我們現在假設欽定了k個數字作為交集的最終結果,那麼包含這些數字數字組成的集合就可以隨便選,這樣的方案數是\(c(n,k)*(2^}-1)\)(這裡空集是不合法的)。但是這樣算出來的是「至少有k個」,我們要用容斥來處理一下,而且這裡的方案是有序的,所以容斥係數是還要乘以組合數。具體地,恰好選j個的每個方案裡面,都包含了\(c(j,i)\)個有i個的,要算入係數。

至此本題的解法就完了,但是有乙個問題:\(2^}\)是不能快速冪的,所以我們用遞推法,開始的時候\(t=1\),每迴圈一次,\(t=t*(t+2)\)。

#include #define ll long long

ll n,k,a,fac[1000005],ifc[1000005],inv[1000005],p=1000000007;

ll c(int x,int y)

int main()

BZOJ 2839 集合計數 廣義容斥

在乙個 n 個元素集合中的所有子集中選擇若干個,且交集大小為 k 的方案數.按照之前的套路,令 f k 表示欽定交集大小為 k 其餘隨便選的方案數.令 g k 表示交集恰好為 k 的方案數.則有 f k sum binomg k 反演得 g k sum 1 binomf i 而 f k binom2...

BZOJ2839 集合計數 容斥 組合

題目描述 乙個有n個元素的集合有2 n個不同子集 包含空集 現在要在這2 n個集合中取出若干集合 至少乙個 使得它們的交集的元素個數為k,求取法的方案數,答案模1e9 7。上式對嗎?顯然是不對的,以為它不僅統計了交集為k的而且統計了交集為k以上的。所以我們要用容斥。設g i 為交集大於等於i的方案數...

bzoj 2839 集合計數 容斥原理

因為要在n個裡面選k個,所以我們先列舉選的是哪 k 個,方案數為 c k 確定選哪k個之後就需要算出集合交集正為好這 k 個的方案數,考慮用容斥原理。我們還剩下 n k 個元素,交集至少為 k 的方案數為 2 相當於在僅有剩下 n k 個元素的集合裡隨便選,最後再往每個集合裡塞進這 k 個元素。然後...