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;
}

posted @ 2021-08-04 15:37  Daneii  阅读(59)  评论(0)    收藏  举报