BZOJ 2839 集合計數 廣義容斥

2021-09-29 04:53:04 字數 601 閱讀 6563

在乙個 $n$ 個元素集合中的所有子集中選擇若干個,且交集大小為 $k$ 的方案數.

按照之前的套路,令 $f[k]$ 表示欽定交集大小為 $k$,其餘隨便選的方案數. 令 $g[k]$ 表示交集恰好為 $k$ 的方案數.

則有 $f[k]=\sum_^\binomg[k]$,反演得 $g[k]=\sum_^(-1)^\binomf[i]$

而 $f[k]=\binom2^}$,直接帶入求值即可.

code: 

#include #define n 1000005   

#define ll long long

using namespace std;

const ll mod=1000000007;

void setio(string s)

int a[n];

ll fac[n],inv[n],f[n],g[n],poww[n];

ll qpow(ll x,ll y)

ll inv(ll x)

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 集合計數(廣義容斥)

點此看題面 對於這種恰好為 k 的顯然想到容斥,去設 f i 為交集大小大於等於 i 的方案數,根據廣義容斥的式子就可以發現 ans sum n 1 c i kf i 於是只要考慮如何快速計算 f i 首先有個選出 i 個數的方案數 c n i 那麼選出的所有集合都必須包含這 i 個數,剩下 n i...

bzoj 2839 集合計數

題意 乙個有n個元素的集合有2 n2 n 2n個不同子集 包含空集 現在要在這2 n2 n 2n個集合中取出若干集合 至少乙個 使得它們的交集的元素個數為k,求取法的方案數,答案模1000000007 題解 好題。一開始覺得應該很簡單,然而很快就證明了我很天真。設f k cn k i 12n kc2...