CodeForces 452C - Magic Trick-概率

来源:互联网 发布:背身护球 知乎 编辑:程序博客网 时间:2024/06/06 12:26

题意:有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;} 


0 0