【 Gym - 101124E 】Dance Party (数学)

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;
}
posted @ 2017-02-21 12:48  水郁  阅读(287)  评论(0编辑  收藏  举报
……