CF452C 题解
题目简述
有 \(m \times n\) 张牌,有 \(n\) 个种类,每个种类有 \(m\) 张,现在抽一张放回,再抽一张,求这张牌与第一张抽出的牌种类相同的概率。
思路
本题是一道结论题,我们来推一下公式。
首先需要特判一个点:只有 \(1\) 张牌,即 \(n = m = 1\),那么两次抽都会是这张牌,所以概率为 \(1\),输出 \(1\) 即可。
接着分类模拟:
-
两次抽到的牌是同一张牌,则这种情况的概率为 \(\frac{1}{n}\)。
-
两次抽到的牌种类相同,但不是同一张的概率为 \(\frac{n - 1}{n}\),那么去除第一次抽的牌,第二张牌与第一张种类相同的概率为 \(\frac{m - 1}{n \times m - 1}\)。
因两种情况互不相干,故最终的概率为 \(\frac{1}{n} + \frac{n - 1}{n} \times \frac{m - 1}{n \times m - 1}\)。
下面是代码参考:
#include<iostream>
using namespace std;
double n, m; // 建议直接用 double
int main() {
cin >> n >> m;
if(m == 1 && n == 1) return printf("1\n"), 0; // 特判概率为 1 的情况。
printf("%.12lf\n", (n - 1) / n * (m - 1) / (m * n - 1) + 1.0 / n); // 推的公式
return 0;
}
\[\texttt{The End!}
\]
本文来自博客园,作者:So_noSlack,转载请注明原文链接:https://www.cnblogs.com/So-noSlack/p/17626160.html