BZOJ 2839 集合計數 容斥原理 組合

2022-04-06 19:58:02 字數 803 閱讀 2658

題意:n個元素的集合,選出若干子集使得交集大小為k,求方案數

先選出k個\(\binom\),剩下選出一些集合交集為空集

考慮容斥

\[交集為\emptyset = 任意選的方案數-交集\ge 1 的方案數+交集\ge 2的方案數-...

\]交集\(\ge i\)就是說先選出i個元素在交集裡,剩下的元素的集合任選

那麼就是

\[\sum_^n \binom(2^}-1)

\]組合數直接推階乘和逆元

後面的\(2^\),考慮快速冪的過程\(2^=2^}2^}\)

#include #include #include #include #include using namespace std;

const int n=1e6+5, p=1e9+7;

typedef long long ll;

inline int read()

while(c>='0'&&c<='9')

return x*f;

}int n, k;

ll ans, now=2, inv[n], fac[n], facinv[n];

inline ll c(int n, int m)

inline void mod(ll &x)

int main()

n -= k;

for(int i=n; i>=0; i--)

if(ansans = ans*c(n+k, k)%p;

printf("%lld\n", ans);

}

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