HDU 5159 Card 数学期望
题目传送门
题意
给定\(x\)张牌,分值分别对应\(1,2,\dots,x\),每次抽取一张牌,记录下分数并放回。进行\(b\)次抽取,求出抽取到不同数值分数总和的期望值。
思路
由于每次都会放回,因此每次抽取时,每张牌被抽到的概率都是相等的,为\(\frac{1}{x}\),不被抽到的概率为\(1-\frac{1}{x}\),那么在\(b\)次中,该张牌有被抽到的事件即为\(b\)次都没有被抽到事件的逆事件,因此概率为\(1-(1-\frac{1}{x})^b\),因此每个数的期望即为\(i\cdot(1-(1-\frac{1}{x})^b)\)。
由于每个数都是独立的,求不同数值总和的总期望即为每个数值出现的期望的总和,即\(\sum_{i=1}^{x}i\cdot(1-(1-\frac{1}{x})^b)\),展开有\(i*(1-(1-\frac{1}{x})^b)\cdot(1+2+\cdots+x)\),化简为\(i\cdot(1-(1-\frac{1}{x})^b)\cdot\frac{x\cdot(x+1)}{2}\)。
参考代码
点此展开
//Author:Daneii
#include <bits/stdc++.h>
using namespace std;
#define in(x) scanf("%d",&x)
#define lin(x) scanf("%lld",&x)
#define din(x) scanf("%lf",&x)
typedef long long ll;
typedef long double ld;
typedef pair<int,int> PII;
const int N=100010;
int main()
{
int T;
in(T);
int kase=0;
while(T--)
{
double x,b;
din(x),din(b);
double get=1.0-pow(1.0-1.0/x,b);
double mult=x*(x+1)*1.0/2.0;
double res=get*mult;
printf("Case #%d: %.3lf\n",++kase,res);
}
return 0;
}