Bzoj2839 集合計數 組合數學 容斥

2021-07-15 07:54:01 字數 668 閱讀 3576

答案是含有至少k個的-至少k+1個的+至少k+2個的……

從n個數中選出k個作為交集中的數,是c(n,k),這樣的集合共有2^(2^(n-k))-1個

2^(n-k)是包含選定的k個數的可選集合的數量,選取方案有2^(2^(n-k))-1個(不能有空集否則無法保證k個元素)

所以ans=c(n,k)*c(k,k)*(2^(2^(n-k))-1)-c(n,k+1)*c(k+1,k)*2^(2^(n-k-1)

沒用線性求逆元真是慢死……

#include#include#include#include#define ll long long

using namespace std;

const int mod=1000000007;

const int maxn=1000010;

int fac[maxn],inv[maxn],n,k;

ll ans=0;

int quick_pow_mod(int x,int y,int mod)return ret;

}ll c(int n,int m)

ll calc(int x)

int main()

ans%=mod;

printf("%lld",(ans+mod)%mod);

}

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...