取石子 I [期望]

取 石 子 I 取石子 I I


正 解 部 分 \color{red}{正解部分}

取走其它堆石子 会对 取走第一堆石子的时刻 造成影响,
所以设 x i x_i xi 表示第 i i i 堆石子在 1 1 1 前面取走 这个事件, E ( x ) E(x) E(x) 发生这个事件的期望时间,
由于取一次就可以取完, 于是期望时间的值 等于 概率,

a n s = E ( x 1 + x 2 + x 3 + . . . + x n ) = 1 + E ( x 2 ) + E ( x 3 ) + . . . + E ( x n ) = 1 + p ( x 2 ) + p ( x 3 ) + . . . + p ( x n ) ans = E(x_1+x_2 + x_3 + ... + x_n) = 1 +E(x_2)+E(x_3)+...+E(x_n) = 1 + p(x_2) + p(x_3)+...+p(x_n) ans=E(x1+x2+x3+...+xn)=1+E(x2)+E(x3)+...+E(xn)=1+p(x2)+p(x3)+...+p(xn)

考虑 p ( x i ) p(x_i) p(xi) 怎么求, 可以发现其他堆石子不会影响 1 1 1 i i i, 所以概率为 a i a 1 + a i \frac{a_i}{a_1+a_i} a1+aiai,

∴ a n s = 1 + ∑ i = 2 n a i a 1 + a i \therefore ans = 1 +\sum\limits_{i=2}^n\frac{a_i}{a_1+a_i} ans=1+i=2na1+aiai .

取石子 2 2 2 传送门


实 现 部 分 \color{red}{实现部分}

#include<bits/stdc++.h>
#define reg register

const int maxn = 1e5 + 10;

int N;
int A[maxn];

int main(){
        scanf("%d", &N);
        for(reg int i = 1; i <= N; i ++) scanf("%d", &A[i]);
        double Ans = 1;
        for(reg int i = 2; i <= N; i ++) Ans += 1.0*A[i]/(A[1] + A[i]);
        printf("%.10lf\n", Ans);
        return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值