【 Gym

BUPT2017 wintertraining(15) #4G
Gym - 101124 E.Dance Party

题意

有c种颜色,每个颜色最多分配给两个人,有M个男士,F个女士,求至少一对男士同色的概率。
((1 le C, M, F le 10^9; M + F le 2C))

题解

反面比较好求的,也就是不存在男男同色的概率。
假设每个男士依次选择剩下的颜色,第一个人有2C种选择,当前不同色的概率是1,第二个人有2C-1种选择,当前不同色的概率是(2C-2)/(2C-1),第三个人有2C-2种选择,不同色的概率(2C-4)/(2C-2),...,于是得出公式

[ans=1-sum_{i=1}^{M-1}frac {2C-2i}{2C-i}=1-sum_{i=1}^{M-1}(1-frac {i}{2C-i}) ]

且当M很大的时候,C一定更大,那么此时ans趋于1,数学证明我也不会,但是可以直观地想象一下,男士足够多的情况下要保证没有男男同色就不太可能了。我们只要及时跳出循环即可。
另外我推得一个公式是

[frac{C_{c}^{m}cdot 2^m}{C_{2c}^{m}} ]

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int c,m,f;
double ans=1;
int main() {
	scanf("%d%d%d",&c,&m,&f);
	for(int i=1;i<m;i++){
		ans*=(1-i*1./(2*c-i));
		if(ans<1e-10)break;
	}
	printf("%.10f",1-ans);
	return 0;
}
原文地址:https://www.cnblogs.com/flipped/p/6423595.html