HDU 4586 Play the Dice 简单思考

题意:给你N个骰子,1-n上标有各自的数,然后掷骰子一次,得到朝上数字数量的钱;再给你m,然后m个数表示,当该数朝上时,你可以得到这么多钱,并且可以继续掷骰子。

问你你能得到的钱的期望。

思路:若骰子上面的数字和为sum,则掷第一次:sum/n

第二次:sum/n*(m/n)

第三次:sum/n*(m/n)*(m/n)

.........

第k次:sum/n*(m/n)^k

答案为当k取无穷大时,上式的和,整理发现为等比数列,结果为:
计 q = m/n

sum/n  *  (1-q^k)/(1-q);

当sum==0时,无论怎么掷骰子,得到的都是0

当n==m时,无论怎么掷骰子,都掷不完,一直有下一次掷骰子,所以为inf

其余情况,由于m<n,所以当k取无穷大时,q趋向于0,则上式整理的:sum/(n-m),代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int maxn = 207;
double sum;
int n, m;

int main() {
    while(~scanf("%d", &n)) {
        sum = 0.0;
        for(int i = 0; i < n; ++i) {
            int t; scanf("%d", &t);
            sum += t*1.0;
        }
        scanf("%d", &m);
        for(int i = 0; i < m; ++i) {
            int t; scanf("%d", &t);
        }
        if(sum == 0.0) printf("0.00\n");
        else if(n == m) printf("inf\n");
        else {
            printf("%.2lf\n", sum/(n-m));
        }

    }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JalexDooo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值