zoukankan      html  css  js  c++  java
  • Alice和Bob赌糖果【赌徒破产模型】

    题意

    ( ext{Alice})([l, r]) 中随机抽一个数,( ext{Bob})([L, R]) 中随机抽一个数,谁抽的数大谁就赢,输的一方给另一方(1) 颗糖(平局不用给糖),他们会一直赌下去直到有一方没有糖果为止。 ( ext{Alice})(n) 颗糖果,( ext{Bob})(m) 颗糖果,求 ( ext{Alice})( ext{Bob}) 的糖果赢完的概率。

    (0leq n,m leq 1e5,n+m > 0,1 leq l leq r leq 100,1leq L leq Rleq 100)

    链接:https://ac.nowcoder.com/acm/problem/14962

    分析

    (f_i) 表示 ( ext{Alice}) 能从 (i) 颗糖果赢到 (n+m) 颗的概率,(f_0=0) 表示一开始就输了,(f_{n+m}=1) 表示胜利,要求的答案为 :(f_n)(p)( ext{Alice}) 每次赢的概率,(q) 为每次输的概率。

    按照题目的条件,每次取整数,循环两个区间暴力即可求出 (p,q)

    有:

    [f_i=p*f_{i+1}+q*f_{i-1}+(1-p-q)*f_{i} ]

    (f_{i-1}=k_{i-1}*f_i),代入,得:

    [k_i=frac{p}{p+q-q*k_{i-1}} 1leq i leq n+m-1 ]

    并且,(k_0=0)

    最终结果从 (f_{n+m}=1) 倒推,根据 (f_{i-1}=k_{i-1}*f_i),即可求出 (f_n)

    特判

    (p=0 且 p=0) 时,计算 (k_i) 时,分母可能为 (0)。可以证明,当其中一个不为 (0) 时,分母不可能为 (0)

    代码

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N=2e5+5;
    double k[N];
    int main()
    {
        int n,m,l,r,L,R;
        scanf("%d%d%d",&n,&l,&r);
        scanf("%d%d%d",&m,&L,&R);
        int a=0,b=0,c=0;
        for(int i=l;i<=r;i++)
        {
            for(int j=L;j<=R;j++)
            {
               a+=(i>j?1:0);
               b+=(i<j?1:0);
               c++;
            }
        }
        double p=1.0*a/c,q=1.0*b/c,ans=1.0;
        if(p==0&&q==0)
            ans=0;
        else
        {
            k[0]=0;
            for(int i=1;i<m+n;i++)
                k[i]=p/(p+q-q*k[i-1]);
            for(int i=n+m-1;i>=n;i--)//f[n+m]=1
                ans*=k[i];
        }
        printf("%.5f
    ",ans);
        return 0;
    }
    
    
  • 相关阅读:
    Linux学习——操作文件与目录
    链表去重
    Android主题换肤 无缝切换
    android 换肤模式总结
    NotificationListenerService不能监听到通知
    判断app是否在后台
    模拟接听电话的方法,兼容华为android5.0以上设备
    Windows下安装破解JIRA6.3.6
    一些as的配置
    Android BLE开发——Android手机与BLE终端通信初识
  • 原文地址:https://www.cnblogs.com/1024-xzx/p/13658177.html
Copyright © 2011-2022 走看看