牛客练习赛38 B. 出题人的女装(条件概率)

版权声明:欢迎转载,若转载,请标明出处,如有错误,请指点,也欢迎大佬们给出优化方法 https://blog.csdn.net/Charles_Zaqdt/article/details/86548007

题目链接:https://ac.nowcoder.com/acm/contest/358/B

       一道概率论的题,涉及到了贝叶斯定理,P(AB) = P(B) * P(A|B) = P(B|A) * P(A),其中P(AB)表示A事件和B事件同时发生的概率,P(A|B)表示在B发生的情况下发生A的概率,那么对于这道题来说我们要求的就是在第一次取到了女装的情况下,第二次又取到女装的概率,那么P(AB)就是两次都取到女装的概率,P(A)就是第一次取到女装的概率,P(B)就是第二次取到女装的概率,那么P(B|A)就是在第一次取到女装的情况下第二次取到女装的概率,满足P(B|A) = P(AB) / P(A),就可以得到两个式子:

                             

       然后我们就可以求出来P(B|A)了,但是又因为需要求出小数形式和分数形式,前者需要double,后者需要ll,所以操作起来会很麻烦,所以这里就需要进行一次化简,把P(AB) / P(A)的情况化简为:


AC代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
double x,y,n,m;
int t;

int main()
{
	cin>>n>>m>>x>>y>>t;
	ll xx = x * m * (x - 1) * (m - 1) + n * y * (y - 1) * (n - 1);
	ll yy = (n - 1) * (m - 1) * (x * m + y * n);
	if(t == 0){
		printf("%.3f\n", 1.0 * xx / yy);
	}
	else{
		printf("%lld/%lld\n", xx / __gcd(xx, yy), yy / __gcd(xx, yy));
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Charles_Zaqdt/article/details/86548007