bzoj2893 集合計數

2022-05-30 21:36:10 字數 1022 閱讀 5560

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

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

一行兩個整數n,k

一行為答案。

3 2【樣例說明】

假設原集合為

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

【資料說明】

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

bzoj題目鏈結(許可權題)

前置知識:廣義容斥原理

考慮對於每個方案作為乙個元素,每一位相同作為乙個性質。

考慮在\(n\)個裡選\(x\)個,要滿足這\(x\)個性質,即集合中有\(x\)個相同,剩下\(n-x\)個集合裡的元素可選可不選,但是不能都不選,要減去空集的乙個,注意這裡的集合指的是題目中的集合,

所以可得:

\[\alpha (x) = \binom (2^}-1)

\]然後設\(\beta (x)\)為恰好有x個性質的元素個數,可得:

\[\beta(x) = \sum _ ^ (-1)^\binom \alpha(i)

\]答案為\(\beta (k)\)。

#includeusing namespace std;

#define int long long

void read(int &x)

void print(int x)

void write(int x)

#define maxn 1000050

#define mod 1000000007

int n,fac[maxn],ifac[maxn],f[maxn],k;

int qpow(int a,int x)

signed main()

write((ans%mod+mod)%mod);

return 0;

}

bzoj 2839 集合計數

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

bzoj2839 集合計數

bzoj許可權題 離線題庫 首先,還是按照這類題目的套路分析 設函式 g x 表示交集至少大小為 x 的方案數 那麼先組合數算選取 x 個數的方法,再對剩下的 n x 個數算集合的集合 也就是集族咯 個數,可以得到 g x 的表示式 g x binom 2 1 那麼我們只要找到乙個容斥函式 f i ...

bzoj2839 集合計數

傳送門 分析 咕咕咕我的做法和這個部落格幾乎相同 只是我在處理 2 1 的時候是先處理前面的再處理後面的 所以前面的 2 我們只需要從 i n 開始迴圈,每次平方即可 include include include include include include include include in...