Magic Trick 题解

· · 题解

思路

本题显然是一道概率题,先简单介绍概率中的事件:

然后,可以将答案分为两部分:

  1. 抽到的两张牌是同一张

    因为一共有 n 张牌,概率为 \dfrac{1}{n}

  2. 抽到的两张牌不是同一张但点数相同

    抽到的两张牌不是同一张的概率显然是 \dfrac{n-1}{n}

    一种牌共有 m 张,抽走一张还剩 m-1 张,一共有 n×m 张牌,抽走一张还剩 n×m-1 张,因此点数相同的概率是 \dfrac{m-1}{n×m-1}

    此部分的两个条件是积事件,相乘就是此部分成立的概率,为 \dfrac{n-1}{n}×\dfrac{m-1}{n×m-1}

可以发现,这两个部分答案满足 A\cap B=\varnothing,为互斥事件,因此把它们加起来就是完整的答案。

代码

#include <bits/stdc++.h>
using namespace std;
double n, m;
int main() {
    cin >> n >> m;

    if (n == 1 && m == 1)
        cout << '1';
    else
        cout << 1 / n + (n - 1) / n*(m - 1) / (n * m - 1);

    return 0;
}