BZOJ2839集合計數 容斥,組合

2022-09-10 00:48:27 字數 714 閱讀 6138

這道題首先從n個數中選出k個數出來把他們成為交集的那些數,可以得到方案c(n,k) 問題轉化為在(n-k)個數中公共交集為空集的方案數 首先對於x個數來說,有2^x種子集,每個子集考慮選還是不選就有2^(2^x)種方案 給定乙個集合交集大小至少為i的情況,即最後乙個集合交集》=i的情況 選i的時候要乘上c(n-k,i) 容斥就變成 2 ^( 2^(0>=) ) -2 ^ ( 2^(1>=) ) + 2^ ( 2^ (2>=) )……….. (這裡的0>=,1>=為至少包含元素的方案數)

於是乎,答案就出來了 (有可能有錯,歡迎挑錯)

於是乎,答案就出來了 (有可能有錯,歡迎挑錯)

#include#include#includeusing namespace std;

typedef long long ll;

const ll mod = 1000000007;

ll n,k,inv[1000005],jc[1000005];

//ll f2[1000005];

ll ksm(ll a,ll b)

return ans;

}void init()

inline ll getc(ll a,ll b)//c(a,b)

int main()

tmp=tmp*getc(n,k)%mod;

printf("%lld",(tmp%mod+mod)%mod);

}

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 個元素。然後...