Money

非等概率的抛硬币抛一次正面向上的概率是 p = a b p=\frac{a}{b} p=ba,问你抛k次偶数数次正面向上的概率是多少,答案 X Y \frac{X}{Y} YX是模意义下的整数。
首先可以得到答案
$
\sum_{i=0(i是偶数)}^{k}{p*(1-p)}
$
这里关键就是处理偶数次。然后我们回忆一下二项式展开里面常用的两种展开方式
T1= ( a + b ) n = ∑ a i ∗ b k − i {(a+b)}^n=\sum{a^i*b^{k-i}} (a+b)n=aibki
T2= ( − a + b ) n = ∑ ( − a ) i ∗ b k − i {(-a+b)}^n=\sum{(-a)^i*b^{k-i}} (a+b)n=(a)ibki
T 1 + T 2 2 \frac{T1+T2}{2} 2T1+T2得到偶数项, T 1 − T 2 2 \frac{T1-T2}{2} 2T1T2得到奇数项。接着就是用逆元代替除法,按照以上的式子进行计算就好了。
关于逆元可以去看这篇博客[link]https://www.cnblogs.com/Judge/p/9383034.html#_label3_1_2_1

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
inline LL read()
{
	LL kk=0,f=1;
	char cc=getchar();
	while(cc<'0'||cc>'9'){if(cc=='-')f=-1;cc=getchar();}
	while(cc>='0'&&cc<='9'){kk=(kk<<1)+(kk<<3)+cc-'0';cc=getchar();}
	return kk*f;
}
const int mod=1e9+7;
LL qp(LL a,LL b)
{
	LL kk=1;
	while(b)
	{
		if(b&1)kk*=a;kk%=mod;
		a*=a;a%=mod;
		b>>=1;
	}
	return (kk%mod+mod)%mod;
}
LL ni(LL x)
{
	x%=mod;
	LL lin=qp(x,mod-2);
	return (lin%mod+mod)%mod;
}
int main()
{
	int T=read();
	for(int ii=1;ii<=T;++ii)
	{
		LL a,b,k;b=read();a=read();k=read();
		LL ans;
		ans=(qp(b,k)+qp(b-2*a,k))%mod;//分子那部分
		ans=ans*ni(2*qp(b,k))%mod;//逆元(分母)
		ans=(ans+mod)%mod;
		cout<<ans<<endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值