Atcoder abc331
https://atcoder.jp/contests/abc331
G - Collect Them All
n 卡
数字 1~m
c[i]张卡 写着i
随机 抽取一个卡, 记录抽过的卡, 放回箱子
求 exp(次数) 直到每种数字至少被抽到一次, mod 998244353
m <= n <= 2e5
2s
1024mb
我的思路
这 看起来是 min-max 容斥吗?
对于一个具体的方案,有对应的集合$S=\lbrace t_1,t_2,\cdots,t_m \rbrace$ 表示每个元素首次发生的次数
那么$\max(S)$就是 完成的时刻
$\max(S)=\sum_{T\subseteq S}(-1)^{|T+1} \min(T)$
$E(\max(S))=E(\sum_{T\subseteq S,T\neq \emptyset}(-1)^{|T|+1} \min(T))=\sum_{T\subseteq S}(-1)^{|T|+1} E(\min(T))$
$E(\min(T)) = \sum_{t=1}^{\infty} p(\min(T)=t)$
也就是 t-1次没有选中T内的任何一个,而第t次选中了
设选中的概率 为$\displaystyle p_T = \frac{\sum_{i\in T} c_i}{N}$
$E(\min(T)) = \sum_{t=1}^{\infty} tp(1-p)^{t-1}= -p(\sum_{t=1}^{\infty}(1-p)^t)’$, 把p看作一元变量
$=-p((1-p)\frac{1}{1-(1-p)})’$
$=-p((\frac{1}{p}-1)’$
$=\frac{1}{p}$
$\displaystyle \mathrm{ans}=\sum_{T\subset S} (-1)^{|T|+1} \frac{N}{\sum_{i\in T}c_i}$
所以如果能求得 所有$\lbrace 1,2,\cdots,m \rbrace$子集的$c_i$和 对应的$(-1)^{|T|+1}$ 就好了
因为$c_i$和是小于N的
注意到 $\displaystyle -(1-x^{sz_1})(1-x^{sz_2})\cdots(1-x^{sz_m})$的系数,就是要求的内容
代码
https://atcoder.jp/contests/abc331/submissions/50048769
1 |
|
总结
这是第3次遇到min-max 容斥了吧, 之前有atcoder abc242 和 codeforces 1687,不过这是第一次自己做出来,虽然编码不快,但是算自己能完整首次做出一个新算法,可喜可贺
橙题也正常