题意:有m个deck,每个deck上有n张牌。现在混在一起,要求你在n*m张中选出n张,拿来做魔术。
观众从n张中选一张,问你作为魔术师 拿出与他选的值一样的那张的概率
首先n张牌,有1/n的机会选到观众选的同一张。
那么就有(n-1)/n的机会选的是非同一张,那么就相当于要选一张 面值 相同的牌, 现在是先从n*m张中选出n张,再从n张中选出1张与观众那张等值的牌,其实等价于直接从n*m-1张(除去观众那张)选出 1张等面值的牌,而这个牌还有m-1张
所以概率是两部分 a= 1/n
b= (n-1)/n * (m-1)/(n*m-1)
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;
const double pi=acos(-1.0);
double eps=0.000001;
int dp[100005];
__int64 min(__int64 a,__int64 b)
{return a<b?a:b;}
__int64 max(__int64 a,__int64 b)
{return a>b?a:b;}
vector<int > mp[100005];
int vis[100005];
int fa[100005];
int col[100005];
int flag=0;
int st,ed;
int id=0;
int len=0;
int ok=0;
int ans[100005];
set<int>sb;
int succ=0;
int main()
{
double n,m;
cin>>n>>m;
if (n==1&&m==1){printf("1\n");return 0;}
double a=1.0/n;
double b=(n-1)*(m-1)/n/(n*m-1);
printf("%.7lf\n",a+b);
return 0;
}