【题解】AGC038E Gachapon
令 \(t_i\) 表示 \(i\) 生成第 \(B_i\) 次的时间,注意到答案为 \(E(\max (\{t_0,t_1\cdots,t_{n-1}\}))\),min-max 容斥:
现在的问题变成了求 \(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\) 也看做一个时刻就没问题了)。
那么一个状态出现的概率(贡献)为:
当然还需要乘上 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 。
把期望(时间,步数 ...)拆成每个(时间,步数 ...)的概率和是常见套路。