1. 程式人生 > >牛客國慶集訓派對Day2 H 卡牌遊戲【期望】

牛客國慶集訓派對Day2 H 卡牌遊戲【期望】

連結:https://www.nowcoder.com/acm/contest/202/H
來源:牛客網
 

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 1048576K,其他語言2097152K
Special Judge, 64bit IO Format: %lld

題目描述

小貝喜歡玩卡牌遊戲。某個遊戲體系中共有N種卡牌,其中M種是稀有的。小貝每次和電腦對決獲勝之後都會有一個抽卡機會,這時系統會隨機從N種卡中選擇一張給小貝。普通卡可能多次出現,而稀有卡牌不會被重複抽到。小貝希望收集到K種稀有卡牌,她想知道期望需要多少次獲勝才能實現這個目標。

輸入描述:

資料有多組,第一行一個整數T表示資料組數。
每組資料一行,三個整數N,M,K .

輸出描述:

對於每組資料,輸出形如"Case #x: y",其中 x 為這組資料的編號(從1開始),y 為這組資料的答案。答案的絕對誤差或相對誤差在10-6以內都認為是正確的。

 

示例1

輸入

複製

2
5 2 1
40 9 5

輸出

複製

Case #1: 2.5
Case #2: 28.1146825397

備註:

1 ≤ T ≤ 100
1 ≤ N ≤ 105
1 ≤ M ≤ N
1 ≤ K ≤ M

思路:

取出第一個稀有的期望次數+...+取出第k個的期望次數。

程式碼:

#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
#define MAXN 1005
int n,m,k;
int main()
{
    int t;
    scanf("%d",&t);
    for(int tt=1;tt<=t;tt++)
    {
        scanf("%d%d%d",&n,&m,&k);
        double ans=0;
        for(int i=0;i<k;i++)
        {
            ans+=1.0*(n-i)/(m-i);
        }
        printf("Case #%d: %.7f\n",tt,ans);
    }
    return 0;
}