CF452C 题解

发布时间 2023-08-13 09:29:10作者: So_noSlack

洛谷链接&CF 链接

题目简述

\(m \times n\) 张牌,有 \(n\) 个种类,每个种类有 \(m\) 张,现在抽一张放回,再抽一张,求这张牌与第一张抽出的牌种类相同的概率。

思路

本题是一道结论题,我们来推一下公式。

首先需要特判一个点:只有 \(1\) 张牌,即 \(n = m = 1\),那么两次抽都会是这张牌,所以概率为 \(1\),输出 \(1\) 即可

接着分类模拟:

  1. 两次抽到的牌是同一张牌,则这种情况的概率为 \(\frac{1}{n}\)

  2. 两次抽到的牌种类相同,但不是同一张的概率为 \(\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!} \]