bzoj 2839 集合計數 容斥原理

2022-04-30 08:39:11 字數 845 閱讀 3810

因為要在n個裡面選k個,所以我們先列舉選的是哪$k$個,方案數為$c_^k$

確定選哪k個之後就需要算出集合交集正為好這$k$個的方案數,考慮用容斥原理。

我們還剩下$n-k$個元素,交集至少為$k$的方案數為$2^}$。

相當於在僅有剩下$n-k$個元素的集合裡隨便選,最後再往每個集合裡塞進這$k$個元素。

然後就是很簡單的容斥了。

減去交集至少為k加上其他乙個元素的方案數,加上交集至少為k加上其他兩個元素的方案數。。。

$$ans=c_^k\times(2^}-c_^1\times 2^}+c_^2\times 2^}-.....)$$

好像網上其他做法跟我不太一樣呢。。。

1 #include2 #include3 #include4 #include5

#define n 1000005

6#define ll long long

7using

namespace

std;

8const

int p = 1000000007;9

intn,k;

10 ll pw(int x,int

y)11

19return

lst;20}

21int

pow[n],jie[n];

22int

main()

2336 ans=ans*jie[n]%p*pw(jie[k],p-2)%p*pw(jie[n-k],p-2)%p;

37 printf("

%lld\n

",ans);

38return0;

39 }

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的方案數...

bzoj2839 集合計數 容斥 組合

2839 集合計數time limit 10 sec memory limit 128 mb submit 523 solved 287 submit status discuss description 乙個有n個元素的集合有2 n個不同子集 包含空集 現在要在這2 n個集合中取出若干集合 至少乙...