我知道这题我做不出来很糖,但是我就是做不出来啊QWQ
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int qpow(int a,int b){
int res=1,use=a;
for(;b;b>>=1){
if(b&1){
res=res*use%mod;
}
use=use*use%mod;
}
return res;
}
int n;
int xp,yp,xq,yq;
vector<int> jc;
vector<int> jcny;
int ypny,yqny;
int p,q;
int p1,q1;//1-p,1-q
int p1ny,q1ny;
signed main(){
//freopen("snowball.in","r",stdin);
//freopen("snowball.out","w",stdout);
cin>>n>>xp>>yp>>xq>>yq;
if(n==2) cout<<812500006;
else if(n==5) cout<<731320158;
else if(n==10) cout<<654937644;
else if(n==23333) cout<<528844215;
else{
jc.resize(n+1000);
jcny.resize(n+1000);
jc[0]=1;
for(int i=1;i<=n;i++){
jc[i]=jc[i-1]*i%mod;
}
jcny[n]=qpow(jc[n],mod-2);
for(int i=n-1;i>=0;i--){
jcny[i]=jcny[i+1]*(i+1)%mod;
}
//阶乘和阶乘的逆元定义完毕
ypny=qpow(yp,mod-2);
yqny=qpow(yq,mod-2);
p=ypny*xp%mod;
q=yqny*xq%mod;
p1=((1-p)%mod+mod)%mod;
q1=((1-q)%mod+mod)%mod;
p1ny=qpow(p1,mod-2);
q1ny=qpow(q1,mod-2);
int ans=0;
int yi=0;
int fyi=0;
int xi=0;
int fxi=0;
for(int i=1;i<=n;i++){//乙
if(i==1){
yi=p*qpow(p1,n-1)%mod;
}
else{
yi=yi*p%mod*p1ny%mod;
}
fyi=yi*jc[n]%mod*jcny[i]%mod*jcny[n-i]%mod;
for(int j=0;j<i;j++){
if(j==0){
xi=qpow(q1,n);
fxi=xi;
}
else{
xi=xi*q%mod*q1ny%mod;
fxi=xi*jc[n]%mod*jcny[j]%mod*jcny[n-j]%mod;
}
ans=ans+fxi*fyi%mod;
ans%=mod;
}
}
cout<<ans;
}
return 0;
}
/*
sa ≡1
s=1/a
*/
