• nowcoder 202H-卡牌游戏


    题目链接

    题目描述
    小贝喜欢玩卡牌游戏。某个游戏体系中共有N种卡牌,其中M种是稀有的。小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝。普通卡可能多次出现,而稀有卡牌不会被重复抽到。小贝希望收集到K种稀有卡牌,她想知道期望需要多少次获胜才能实现这个目标。
    输入描述:
    数据有多组,第一行一个整数T表示数据组数。
    每组数据一行,三个整数N,M,K.1 ≤ T ≤ 100, 1 ≤ N ≤ 10$$$^5$$$,1 ≤ M ≤ N,1 ≤ K ≤ M
    输出描述:
    对于每组数据,输出形如"Case #x: y",其中 x 为这组数据的编号(从1开始),y 为这组数据的答案。答案的绝对误差或相对误差在10$$$^{-6}$$$以内都认为是正确的。
    输入
    2
    5 2 1
    40 9 5
    输出
    Case #1: 2.5
    Case #2: 28.1146825397
    题意
    一共n个物品,其中n-m个物品抽到放回,m个物品抽到不放回。抽到m个物品中的k个,求需要抽多少次的期望。
    分析
    如果对这个题目没有一点想法,那么先来看一下《线性代数与概率统计》里面经典的投篮数学期望问题吧。
    篮球选手连续定点投篮,直到命中为止。假设他每次命中的概率为p,且各次投篮是相互独立的。用X表示首次命中所需投篮次数,求X的数学期望。 那么X服从下面的几何分布 $$$$$$ egin{align} & P(X=k)=(1-p)^{k-1}p \ & E(X)=sum_{k=1}^{infty}k(1-p)^kp=psum_{k=1}^{infty}k(1-p)^k=pfrac{1}{p^2}=frac{1}{p} \ end{align} $$$$$$ 那么对于这道题而言,相当于总共要投中k个球。先求第一次抽到稀有卡的次数期望,和上面的过程是一样的,抽中稀有卡的概率是$$$p=frac{m}{n}$$$,所以期望是$$$EX=frac{n}{m}$$$;接下来再求第二次抽到稀有卡的次数期望,其实还是一次“投球实验”,只不过概率变为$$$p=frac{m-1}{n-1}$$$,而期望也相应的变为$$$EX=frac{n-1}{m-1}$$$。所以1~k次的次数期望,用同样的方法就可以求出来。
    总结
    对不起我的线性代数老师
    代码
    #include<stdio.h>
    int main(){
        int T;
        int n,m,k;
        scanf("%d",&T);
        double ans=0;
        for(int kase=1;kase<=T;++kase){
            scanf("%d%d%d",&n,&m,&k);
            printf("Case #%d: ",kase);
            ans=0.0;
            for(int i=0;i<=k-1;i++)
                ans+=1.0*(n-i)/(m-i);
            printf("%.7f
    ",ans);
        }
    }
  • 相关阅读:
    CCF CSP 201403-2 窗口
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
  • 原文地址:https://www.cnblogs.com/tobyw/p/9737629.html
Copyright © 2020-2023  润新知