题解 | #Glass Bead Game# #ICPC# #昆明# #条件概率#
Glass Bead Game
https://ac.nowcoder.com/acm/contest/32708/G
牛客32708G - ICPC2021 · 昆明 - Glass Bead Game
- https://ac.nowcoder.com/acm/contest/32708/G
- 来源:ICPC2021 · 昆明
- 知识点:条件概率
- 难度:蓝、铜牌题
题意
- 给出一个长度为 的排列,数字 被选中的概率是
- 刚开始序列是 有序的。
- 现在随机选择一个元素(注意数字 被选中的概率是 ),将它移动到序列最前。假如选择的元素是从前往后第 个,那么花费是 。
- 现在进行了无穷次上述操作,问第无穷次操作代价的期望。
思路
- 能观察到,进行了无穷次操作以后,这 种排列,每一种排列的概率不均等。
- 因此,这个答案是错误的:
- 考虑针对每个元素算贡献
- 对于标有数字 的元素,它被选中的概率是 ,假设排在它前面的元素数量的期望为 ,那么它对答案的贡献为
- 排在它前面的元素数量的期望 怎么计算?
- 考虑条件概率
- 对于标有数字 的元素,它前面的元素数量的期望
代码
double ans = 0;
for (int i=1; i<=n; i++)
{
double sum = 0;
for (int j=1; j<=n; j++)
{
if(i == j)
continue;
sum += pi[j] / (pi[i]+pi[j]);
}
ans += sum*pi[i];
}
printf("%.10lf\n",ans);