Coin 2017ICPC西安网络赛

本文介绍了一种计算不均匀硬币连续翻转k次后正面朝上次数为偶数的概率的方法。通过二项分布公式简化及二项式定理的应用,提出了一种高效的计算方案,并提供了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接:https://nanti.jisuanke.com/t/17115

Bob has a not even coin, every time he tosses the coin, the probability that the coin's front face up is \frac{q}{p}(\frac{q}{p} \le \frac{1}{2})pq(pq21).

The question is, when Bob tosses the coin kk times, what's the probability that the frequency of the coin facing up is even number.

If the answer is \frac{X}{Y}YX, because the answer could be extremely large, you only need to print (X * Y^{-1}) \mod (10^9+7)(XY1)mod(109+7).

Input Format

First line an integer TT, indicates the number of test cases (T \le 100T100).

Then Each line has 33 integer p,q,k(1\le p,q,k \le 10^7)p,q,k(1p,q,k107) indicates the i-th test case.

Output Format

For each test case, print an integer in a single line indicates the answer.

样例输入
2
2 1 1
3 1 2
样例输出
500000004
555555560
题意:一枚不均匀的硬币,正面朝上的概率为q/p,这枚硬币抛了k次,求正面朝上的次数是偶数次的概率mod 10000000007

思路:由二项分布公式可以计算正面朝上是偶数次的概率,但是直接用二项分布公式不好写,而且会超时。我们可以将二项分布公式用二项式定理表示,对二项式进行化简。

二项式为:([ (q/p+1-q/p)^n+(q/p-(1-q/p))^n]/2)%mod  

化简为[1+(p-2q)^n*(p^n)^(mod-2)%mod]*2^(mod-2)%mod;

#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
using namespace std;
ll p,q,k;
ll pow_m(ll x,ll y)
{
    ll ret=1,t=x%mod;
    while(y)
    {
        if(y&1)
        {
            ret*=t;
            ret%=mod;
        }
        y>>=1;
        t*=t;
        t%=mod;
    }
    return ret;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld%lld%lld",&p,&q,&k);
        ll ans=1+pow_m(p-2*q,k)*pow_m(pow_m(p,k),mod-2);
        //printf("%lld\n",ans);
        ans=ans%mod;
        ans=ans*pow_m(2,mod-2);
        ans%=mod;
        printf("%lld\n",ans);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值