题意:一枚不均匀的硬币,正面向上的概率是q/p,问抛k次之后向上的次数为偶数的概率是多少。
输出的概率是整数,是把概率变成分数取模(逆元)得到的。
思路:
度娘神了,下面的例子正好可以用于本题,把最后的结果化成一个分数的形式就可以快速幂了。
#include <bits/stdc++.h>
int MOD=1e9+7;
using namespace std;
typedef long long LL;
LL quickpow(LL m,LL n)
{
LL b=1;
m%=MOD;
while(n>0)
{
if(n&1)b=(b*m)%MOD;
n=n>>1;
m=(m*m)%MOD;
}return b;
}
int main()
{
LL p,q,k;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld",&p,&q,&k);
LL ans=(quickpow(p,k)+quickpow(p-2*q,k))%MOD;
LL temp=quickpow(p,k);
ans=(ans*quickpow(2,MOD-2))%MOD;
ans=(ans*quickpow(temp,MOD-2))%MOD;
printf("%lld\n",ans);
}
return 0;
}