2017 ACM-ICPC 亚洲区(西安赛区)网络赛- B. Coin

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

题意:Bob有一个不均匀的硬币,正面朝上的概率是q/p,将硬币抛k次,问正面朝上的次数是偶数的概率是多少?

假设答案为X/Y,打印(X∗Y−1)mod(109+7).

本题涉及两个知识点幂取模(分治法)和用费马小定理求逆元(在模p时a的逆元就是a^(p-2)).

#include<iostream>
#include<cstdio>
using namespace std;

typedef long long ll;
const int mod=1e9+7;

ll solve(ll a,ll b){
    ll ans=1;
    while(b){
        if(b%2)
            ans=ans*a%mod;
        a=a*a%mod;
        b=b/2;
    }
    return ans;
}
int main(){
    int t;
    ll p,q,k;
    scanf("%d",&t);
    while(t--){
        scanf("%lld%lld%lld",&p,&q,&k);
        ll ans=(p-2*q)*solve(p,mod-2)%mod;
        ans=solve(ans,k);
        ans+=1;
        ans=ans*solve(2,mod-2)%mod;
        printf("%lld\n",ans);
    }
return 0;
}

猜你喜欢

转载自blog.csdn.net/yimo_180227/article/details/82118810