2021 集训队作业 #123
\(\color{red}{\rm Gem ~Island(ED)}(5/2)\)
初始每个人有一颗宝石。
然后执行 \(d\) 天:
- 每天等概率随机的选择一个宝石,然后让其分裂成两个宝石。
求 \(d\) 天后,拥有宝石数前 \(r\) 多的人拥有宝石的数量和的期望。
\(n,d,r\le 500\),答案精确到 \(10^{-6}\)
Solution
由于只需要计算期望和,那么可以计算排名为 \(i\) 的人拥有的宝石的期望,然后求和。
这样我们需要计算的即为:
根据 \(\min-\max\) 容斥,我们有:
然后由于元素均为相同的,不可区分的,只需要考虑大小为 \(i\) 的集合的最小值的期望。设其为 \(f_i\)
这样答案可以写为:
现在考虑我们确定了每个人的被操作次数 \(c_{1\sim n}\),那么得到这件事发生的概率:
即:
于是每种分配 \(c_i\) 的方案发生的概率都是相同的!
现在考虑计算 \(i\) 个元素情况下的最小值,实际上可以直接使用 dp 来计算此期望,设 \(f_{i,j,k}\) 表示当前 \(c\) 的和为 \(j\),最小值为 \(k\),有 \(i\) 个数的方案数,转移的时候限制 \(k\le j/i\) 即可,状态数是 \(nd\log n\) ,转移复杂度为 \(\mathcal O(n^2d\log n)\)。
此时外部元素分配 \(c\) 的方案对我们没有影响,这个部分暴力计算即可(他们对于答案的贡献为 \((\frac{1}{1-x})^{n-i}[x^d]\)(也可以使用 dp 来计算)。最后乘以 \(p=\frac{d!}{(n+d-1)^{\underline{d}}}\)
得到 \(f_i\) 后,计算答案是 easy 的。只是组合数有点过于庞大,希望 long double 可以撑住。
然后被卡精度了。。。。
卡精度了...卡精度了...
我现在最讨厌出题人搞计数题不取模了,妹妹极了。
尝试给出一个其他的做法...
仍然基于之前的做法,每种分配 \(c\) 的方案发生的概率是相同的。
于是问题可以等价于求给 \(n\) 个变量确定一组 \(c_i\) 使得和为 \(K\),求排名前 \(r\) 的元素和的期望。
然后可以考虑通过这种方式来规定前 \(r\) 大的元素具体为谁:
设 \(f(n,d)\) 和 \(g(n,d)\) 表示给 \(n\) 个人分配宝石的方案数。
那么对于 \(f(n,d)\) 有:
即先给 \(k\) 个分一个,然后再递归分。
对于 \(g(n,d)\) 就有:
后半项表示考虑当前这一位被取走的元素的贡献,显然这样是对的(因为前 \(r\) 大的只能在这递归的元素中取到)。
然后这样没有考虑初始的宝石,所以答案要加 \(r\),复杂度 \(\mathcal O(n^3)\)(默认 \(n,d\) 同级别)
不是很懂为啥这样就没有精度问题...精度问题是乱算么。。。