bzoj4665 小w的喜糖 二項式反演

2022-05-01 20:09:10 字數 1144 閱讀 2933

題目鏈結

資料範圍:略。

題解

二項式反演裸題。

$f_$表示,前$i$種欽定$j$拿到自己種類糖果的方案數。

求完了之後可以二項式反演回來即可。

**

#include using namespace std;

typedef long long ll;

const int mod = 1000000009 ;

int n, m;

ll ans;

int col[2010], s[2010], v[2010];

ll c[2010][2010], f[2010][2010], jc[2010], ine[2010], jcc[2010];

char *p1, *p2, buf[100000];

#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? eof : *p1 ++ )

int rd()

while (c > 47)

return x * f;

}int main()

}jc[0] = ine[0] = jcc[0] = jc[1] = ine[1] = jcc[1] = 1;

for (int i = 2; i <= n; i ++ )

for (int i = 1; i <= n; i ++ )

sort(col + 1, col + n + 1);

for (int i = 1; i <= n; i ++ )

v[m] ++ ;

}for(int i = 1; i <= m; i ++ )

f[0][0] = 1;

for (int i = 1; i <= m; i ++ )

} }for (int i = 0; i <= n; i ++ )

for (int i = 1; i <= m; i ++ )

cout << ans << endl ;

return 0;

}

BZOJ4665 小w的喜糖

考慮列舉哪些人一定不合法,那麼方案數可以通過簡單的排列組合算出。於是設 f i j 表示前 i 種糖果,一共有 j 個人一定不合法的方案數,但是這樣並不能保證其他人一定合法,所以需要進行容斥。最後將答案除以每種糖果數量的階乘,即可保證本質不同。時間複雜度 o n 2 includeconst int...

BZOJ 4665 小w的喜糖

題鏈 題解 容斥,dp 令 v i 表示原來擁有i類糖果的人數。乙個套路,首先把每個糖果看成互不相同的,最後再來除以 v i 把同種糖果看成相同的 定義 dp i j 表示前i類糖果,有j個人的糖果和原來的一樣,其他 n j 個人暫時不拿糖果的方案數。這個的轉移如下 對於已經確定的 i,j,列舉乙個...

BZOJ 4665 小w的喜糖

傳送門 見計數想容斥 顯然每個人交換後可以變成任意的排列 所以就是求對於所有排列使得每個位置的值都和一開始的值不同 感覺同乙個值算同乙個數不太好搞,考慮把所有數都看成不同的,最後答案再除 prod fac cnt i 其中 cnt i 表示值為 i 的數的個數 然後發現每個位置都要不同的限制很麻煩,...