BestCoder #26 1002 Card 期望 解题报告

13 篇文章 0 订阅
4 篇文章 0 订阅

题目的意思是,从x张牌里抽1张牌,然后放回重复b次,Sj为每次抽出牌的积分之和,问Sj的期望。

一开始看这个题目的时候考虑用组合做,因为b最大为5,所以考虑Sj由5个数-1个数组成的情况,然后算概率,但是题目的a和T的范围太大,O(Tlog(a))都会T估计,这明摆着是要O(T)的节奏啊。。也就是说,给定一个x,一个b,就有公式可以推出答案。

然后从另一个方向考虑,如果从组合考虑,即使给定几个数被抽到,还得考虑顺序情况,相当复杂,于是可以考虑对于每个数,其实只有2种状态(选中OR未选中),根据这两种状态去求期望会方便很多。

每次抽牌,选中某一张牌的概率为1/x;

抽b次牌结束后,某张牌被抽中概率为p = 1-(1-1/x)^b,(转化为相反的事件再转化回来)。

因此抽中某一张牌对期望的贡献为 i * p ,因此总期望为 ∑(i=1~x) i * p ,即EX = (x + 1)*x* (1-(1-1/x)^b)。

代码:

#include <iostream>
#include <cstdio>
using namespace std;
int cnt = 0;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		cnt++;
		double x;
		int b;
		scanf("%lf%d",&x,&b);
		double p = 1.0;
		for(int i = 0; i < b; i++)
			p *= (1 - 1/x);
		double ans = (1 - p) * (x + 1) * x / 2;
		printf("Case #%d: %.3f\n",cnt,ans);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值