csp模拟 药品试验【数学题】

传送门

是的,这是个数学题。推导的题。

以下证明来自luoyijie聚聚

 

由概率和为1得a+b+c=1

\therefore b=1-a-c

\therefore p_i=ap_{i-1}+(1-b-c)p_i+cp_{i+1}

\therefore (a+c)p_i=ap_{i-1}+cp_{i+1}

\therefore a(p_{i}-p_{i-1})=c(p_{i+1}-p_i)

令d为p的差分数组,即d_i=p_i-p_{i-1}

\therefore ad_i=cd_{i+1}

\therefore d_i:d_{i+1}=c:a

k=\frac{a}{c}

d_i=k^{i-1}d_1,而d1=p_1-p_0=p_1

\therefore p_{2n}=\sum_{i=1}^{2n}d_i=\sum_{i=1}^{2n}k^{i-1}p_1=(k^{2n}-1)p_1=1,p_n=(k^n-1)p_1

\therefore p_n=\frac{k^n-1}{k^{2n}-1}=\frac{k^n-1}{(k^n+1)(k^n-1)}=\frac{1}{k^n+1}=\frac{c^n}{a^n+c^n}

所以你就可以直接算了。

#include<bits/stdc++.h>
using namespace std;
#define int long long

int x,y,z,n,a,b;
const int mod=1e9+7;
int ksm(int a,int b){
	int sum=1;
	while(b){
		if(b&1)sum=sum*a%mod;a=a*a%mod;b>>=1; 
	}return sum;
} 
signed main(){
	cin>>n>>a>>b;
	x=(b-a*b%mod+mod)%mod;
	y=(2*a%mod*b%mod-a-b+2*mod+1)%mod;
	z=(a-a*b%mod+mod)%mod;
	int k=x*ksm(z,mod-2)%mod;
	int gu=ksm(k,n)-1;(gu+=mod)%=mod;
	int ri=ksm(k,2*n)-1;(ri+=mod)%=mod;
	ri=ksm(ri,mod-2);
	gu=gu*ri%mod;
	cout<<gu;
	return 0;
} 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值