Magic Trick 题解
思路
本题显然是一道概率题,先简单介绍概率中的事件:
-
和事件:记作
A\cap B 或A+B ,当且仅当事件A 和事件B 至少一个发生时,事件A\cup B 发生。 -
积事件:记作
A\cap B 或AB ,当且仅当事件A 和事件B 同时发生时,事件A\cap B 发生。 -
互斥事件:记作
A\cap B=\varnothing ,事件A 和事件B 的交集为空,即不能同时发生 -
对立事件:
A\cup B=S 且A\cap B=\varnothing ,整个样本空间仅有事件A 和事件B ,即每次实验必有一个且仅有一个发生。
然后,可以将答案分为两部分:
-
抽到的两张牌是同一张
因为一共有
n 张牌,概率为\dfrac{1}{n} 。 -
抽到的两张牌不是同一张但点数相同
抽到的两张牌不是同一张的概率显然是
\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} 。
可以发现,这两个部分答案满足
代码
#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;
}