nowcoder 202H-卡牌游戏
Posted tobyw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nowcoder 202H-卡牌游戏相关的知识,希望对你有一定的参考价值。
题目描述
小贝喜欢玩卡牌游戏。某个游戏体系中共有N种卡牌,其中M种是稀有的。小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝。普通卡可能多次出现,而稀有卡牌不会被重复抽到。小贝希望收集到K种稀有卡牌,她想知道期望需要多少次获胜才能实现这个目标。
输入描述:
数据有多组,第一行一个整数T表示数据组数。
每组数据一行,三个整数N,M,K.1 ≤ T ≤ 100, 1 ≤ N ≤ 10$$$^5$$$,1 ≤ M ≤ N,1 ≤ K ≤ M
每组数据一行,三个整数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
5 2 1
40 9 5
输出
Case #1: 2.5
Case #2: 28.1146825397
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次的次数期望,用同样的方法就可以求出来。
篮球选手连续定点投篮,直到命中为止。假设他每次命中的概率为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); } }
以上是关于nowcoder 202H-卡牌游戏的主要内容,如果未能解决你的问题,请参考以下文章