因為要在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個集合中取出若干集合 至少乙...