Loading

【题解】AGC038E Gachapon

\(t_i\) 表示 \(i\) 生成第 \(B_i\) 次的时间,注意到答案为 \(E(\max (\{t_0,t_1\cdots,t_{n-1}\}))\),min-max 容斥:

\[E(\max (\{t_0,t_1\cdots,t_{n-1}\}))=\sum_{T\subseteq \{t_0,t_1,\cdots,t_{n-1}\},T\not=\emptyset}(-1)^{|T|-1}E(\min(T)) \]

现在的问题变成了求 \(E(\min (T))\),令 \(T\) 对应的下标集合为 \(S\),那么要求的就是 \(S\) 中最早在什么时候有数满足要求(生成了 \(B_i\) 次)。

同时注意到选出来一个 \(S\) 中的概率为 \(\frac{\sum_{i\in S}A_i}{\sum_{i=0}^{n-1}A_i}\),那么期望花费 \(\frac{\sum_{i=0}^{n-1}A_i}{\sum_{i\in S}A_i}\) 就可以选出一个 \(S\) 中的数,所以只需要考虑仅由 \(S\) 中的元素组成的序列 \(P\),最早在什么时候有数满足要求(生成了 \(B_i\) 次)。

考虑令 \(0\leq x_i<B_i\),由 \(x_i\) 组成的状态,继续生成数相当于将某个 \(x_i\) 加一,最终一定到达一个终止状态。由于要求的是期望时间,所以对于当前状态,对答案的贡献就是其出现的概率,这样子就只需要求所有状态的出现概率和了(还需要考虑终止状态带来的固定 \(1\) 的贡献,不过等价地将 \(\forall i,x_i=0\) 也看做一个时刻就没问题了)。

那么一个状态出现的概率(贡献)为:

\[\frac{\left(\sum_{i\in S} x_i\right)!}{\left(\sum\limits_{i\in S}A_i\right)^{\sum_{i\in S} x_i}}\prod_{i\in S}\frac{A_i^{x_i}}{x_i!} \]

当然还需要乘上 min-max 容斥系数以及 \(\frac{\sum_{i=0}^{n-1}A_i}{\sum_{i\in S}A_i}\) 。注意到这个只和 \(\sum x_i,\sum A_i\) 以及 \(|S|\) 的奇偶性有关,不妨设 \(f(i,sa,sx)\) 表示选到整数 \(i\)\(\sum A_i=sa,\sum x_i=sx\) 时的贡献和(min-max 容斥系数转移时考虑)。

时间复杂度 \(O(n^3)\)

代码:Submission #25500075 - AtCoder Grand Contest 038

把期望(时间,步数 ...)拆成每个(时间,步数 ...)的概率和是常见套路。

posted @ 2021-09-01 16:05  Qiuly  阅读(136)  评论(0编辑  收藏  举报