TopCoder SRM 667 Cats On The Circle

Link
首先给出一个模型:赌徒输光问题。
赌徒输光问题就是一个带吸收壁的随机游走问题,设\(f(a,b,p)\)表示初始位置为\(a\),向右走的概率为\(p\),向左走的概率为\(1-p\),在没到过\(0\)的情况下到\(a+b\)的概率。
\(g_i=f(i,a+b-i,p)\),显然有\(g_0=0,g_{a+b}=1,g_i=pg_{i+1}+(1-p)g_{i-1}\)
推一推可以得到\(g_{i+1}-g_i=\frac{1-p}p(g_i-g_{i-1})\),那么\(g_n=g_1\frac{1-(\frac{1-p}p)^n}{1-\frac{1-p}p}\)
代入\(g_{a+b}=1\)即可解出\(g_1\),这样我们就解决了计算\(f\)的问题。
那么原问题的答案就可以通过枚举是从左边还是右边传到\(k\)得出计算式\(f(n-k-1,k-1,p)f(1,n-2,1-p)+f(k-1,n-k-1,1-p)f(1,n-2,p)\)

#include<bits/stdc++.h>
typedef long double ld;
class CatsOnTheCircle
{
    ld f(int a,int b,ld p)
    {
    if(fabs(p-0.5)<1e-8) return 1.0*a/(a+b);
    if(p<0.5+1e-8) return 1-f(b,a,1-p);
    return (1-powl((1-p)/p,a))/(1-powl((1-p)/p,a+b));
    }
public:
    double getProb(int n,int k,int p)
    {
    ld q=p/1000000000.0;
    return f(n-k-1,k-1,q)*f(1,n-2,1-q)+f(k-1,n-k-1,1-q)*f(1,n-2,q);
    }
};

原文链接: https://www.cnblogs.com/cjoierShiina-Mashiro/p/12243951.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    TopCoder SRM 667 Cats On The Circle

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/325984

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午3:37
下一篇 2023年3月1日 下午3:37

相关推荐