題目大意:
容斥原理 + 組合數學。
一開始看到這題很蒙啊,根本不知道從哪去想,於是就寫了個爆搜。
我就直接粘題解吧,稍微解釋一下。
把集合根據大小分類那個式子:當\(i = 0\)時,\(f(h)\)不就是所有\(x >= 0\)的時候嗎,那相當於沒有任何限制,是所有情況。當\(i = 1\)時,\(f(h)\)是乙個數一定不滿足的情況,給他減去,然後以此類推,兩個數的時候再加上。
\(f(h)\)的取值咋解釋呢?你可以理解為\(s\)個1,要把它分為\(n\)個數,這\(n\)個數可以為0,所以在給它加\(n\)個1。有\(s +n\)個1,就有\(s + n - 1\)個間隙,\(n - 1\)個板將他們分成\(n\)個數。這\(n\)個數有屬於\(h\)的有不屬於的。對於那些屬於\(h\)的,它需要滿足\(x_i > y_i\),所以這\(s + n\)個1還要再減去\(\sum _ (y_i + 1)\)個1。加一是因為\(y_i + 1\)一定可以滿足\(x_i > y_i\)的條件。
底下那個化簡:\(m\)為\(c+1\)的個數,\(i\)為集合元素個數,列舉\(j <= m, j <= i\),\(-j-i(c+1)\)就是有集合中有\(i\)個數,給其中的\(j\)個數\(+1\)。
#include using namespace std;
inline long long read()
const int n = 6e6 + 5, mod = 998244353;
int n, s, m, c, ans, sum;
int y[n], fac[n], inv[n];
void make_pre()
int c(int x, int y)
int calc(int s, int m)
if(i & 1) res = (res - tmp + mod) % mod;
else res = (res + tmp) % mod;
}return res;
}int main()
9 27T1 組合數 容斥原理
1.分特產2414 cut 問題描述 jyy 帶隊參加了若干場acm icpc 比賽,帶回了許多土特產,要分給實驗室的同學們。jyy 想知道,把這些特產分給n 個同學,一共有多少種不同的分法?當然,jyy 不希望任何乙個同學因為沒有拿到特產而感到失落,所以每個同學都必須至少分得乙個特產。例如,jyy...
交流 題解(容斥原理 組合數)
在此。給你n nn個字串,其中選擇k kk個,如果合法則將 變成字元 26 2626 個都可以,前提是合法 構成乙個只含小寫字母的字串,求可以變成多少種字串。合法要求 乙個位置上要不只有一種小寫字母,要不是 解法 可以用狀壓dpdp dp或者容斥原理 組合數完成。首先鋪墊三個內容 交集 並集 集合大...
錯排問題 組合數學 容斥原理
3.錯排問題 problem 題目描述 n本不同的書放在書架上。其中m本書已經重新擺放好,將剩下的n m 本書也重新擺放,使每本書都不在原來放的位置。求有幾種擺法。輸入資料 第1行兩個數n,m 接下來m行,每行兩個數xi,yi表示原來的第xi本書已經放到了第yi 個位置上資料保證任意兩個x不相同,任...