• 出题人的女装(牛客练习赛38题B) (概率+分式运算)


    链接:https://ac.nowcoder.com/acm/contest/358/B
    来源:牛客网

    出题人的女装
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 524288K,其他语言1048576K
    64bit IO Format: %lld

    题目描述

    出题人早上起床就打算穿衣服,他有两箱衣服,因为懒,他在这两天只打算打开一个箱子.
    两个箱子中一个有n件衣服,其中有x件女装,另一个有m件衣服,其中有y件女装.
    出题人在第一天随机挑一个箱子后,接下来的两天就会从此箱子中随机找一件衣服穿.

    又因为出题人懒而且很有钱,所以他穿完衣服后不会去洗,而是直接扔进垃圾桶,也不会放回原来的箱子.

    已知出题人第1天穿了女装,求他第二天依然穿女装的概率

    输入描述:

    第一行包含5个整数n,m,x,y,t

    输出描述:

    若t=0,则在第一行输出概率(四舍五入保留小数点后3位,概率为0输出0.000,概率为100%输出1.000)
    若t=1,则在第一行输出概率(最简分数形式,概率为0输出0/1,概率为100%输出1/1)
    示例1

    输入

    复制
    10 10 8 8 1

    输出

    复制
    7/9

    备注:

    2<=n,m<=10000
    2<=x<=n且2<=y<=m
    链接:https://ac.nowcoder.com/acm/contest/358/B
    来源:牛客网
    中文题意自行阅读。
    这个概率问题还是有点坑的,首先出题人第一天穿了是女装,那么他在用哪个箱子的概率不是1:1平等的,而是根据箱子中女装概率的比例来的。
    此处引用官方题解:
    由于已知第一天穿了女装,那么选取两个箱子的概率不是1:1了 Ans=P(两次都取到女装)/P(第一次取到女装) P(两次都取到女装)= P(第一次取到女装)= 因为分子分母都有 ,编程的时候可以忽略,减少代码复杂度. 又由于和善的数据 范围,只要long long暴力求分子分母然后化简即可 这是一个叫贝叶斯定理的东西,有兴趣的可以上网查一查
    本人用直接用的封装好的可以分式运算的结构体(很方便)。不会爆longlong,直接写了。
    x细节见我的ac代码:
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <vector>
    #define sz(a) int(a.size())
    #define all(a) a.begin(), a.end()
    #define rep(i,x,n) for(int i=x;i<n;i++)
    #define repd(i,x,n) for(int i=x;i<=n;i++)
    #define pii pair<int,int>
    #define pll pair<long long ,long long>
    #define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
    #define MS0(X) memset((X), 0, sizeof((X)))
    #define MSC0(X) memset((X), '', sizeof((X)))
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define eps 1e-6
    #define gg(x) getInt(&x)
    #define db(x) cout<<"==  "<<x<<"  =="<<endl;
    using namespace std;
    //typedef __int128 ll;
    typedef long long ll;
    inline void getInt(int* p);
    const int maxn=1000010;
    const int inf=0x3f3f3f3f;
    /*** TEMPLATE CODE * * STARTS HERE ***/
    ll n,m,x,y,t;
    ll gcd(ll a,ll b)
    {
        if(b==0)
        {
            return a;
        }else
        {
            return gcd(b,a%b);
        }
    
    }
    ll ABS(ll x) {
        return x<0 ? -x : x;
    }
    struct F {
        ll num,den;// fenzi -> num  fenmu-> den
        F(ll num=0,ll den=1) {
            if(den<0) num=-num,den=-den;
            ll g = gcd(ABS(num),den);
            this->num = num/g;
            this->den = den/g;
        }
        F operator+(const F &o)const {
            return F(num*o.den + den*o.num, den*o.den);
        }
        F operator*(const F &o)const {
            return F(num*o.num , den*o.den);
        }
        F operator/(const F &o) const {
            return F(num*o.den,den*o.num);
        }
    };
    int main()
    {
        cin>>n>>m>>x>>y>>t;
        if(t==0)
        {
            double ans=((x-1)*1.0*x/(n*(n-1))+(y*(y-1)*1.000/(m*(m-1))));
            ans=ans/(1.0*x/n+1.0*y/m);
            printf("%.3lf
    ",ans);
        }else
        {
            F fz = (F(x,n)*F(x-1,n-1))  + (F(y,m)*F(y-1,m-1));
            F fm = F(x,n) + F(y,m);
            F  ans = fz/fm;
            cout<<(long long )ans.num<<'/'<<(long long )ans.den<<endl;
    
        }
        return 0;
    }
    
    inline void getInt(int* p) {
        char ch;
        do {
            ch = getchar();
        } while (ch == ' ' || ch == '
    ');
        if (ch == '-') {
            *p = -(getchar() - '0');
            while ((ch = getchar()) >= '0' && ch <= '9') {
                *p = *p * 10 - ch + '0';
            }
        }
        else {
            *p = ch - '0';
            while ((ch = getchar()) >= '0' && ch <= '9') {
                *p = *p * 10 + ch - '0';
            }
        }
    }
    
    
    本博客为本人原创,如需转载,请必须声明博客的源地址。 本人博客地址为:www.cnblogs.com/qieqiemin/ 希望所写的文章对您有帮助。
  • 相关阅读:
    Kibana6.8.6简单操作手册
    自学思科SD-WAN Zero Touch Provisioning(ZTP)零接触配置
    自学思科SD-WAN Zone Based Firewall(ZBF)区域防火墙
    自学思科SD-WAN Application Aware Routing(AAR)应用感知路由
    自学思科SD-WAN策略框架-本地策略(控制策略+数据策略)
    自学思科SD-WAN策略框架-集中式数据策略
    自学思科SD-WAN策略框架-集中式控制策略
    国密算法说明SM2、SM3、SM4
    Docker Desktop 通过本地命令运行.net core程序
    关于windows使用docker的总结
  • 原文地址:https://www.cnblogs.com/qieqiemin/p/10290223.html
Copyright © 2020-2023  润新知