抽卡(概率論)

抽卡(概率論)

傳送門

思路:反向考慮,pans=1p()p_{ans}=1-p_{(一張卡都抽不到)}

ii個卡池抽不到卡的概率爲pi=aibiaip_i=\dfrac{a_i-b_i}{a_i}

因爲每個事件是獨立事件,

所以:p()=p1×p2×pnp_{(一張卡都抽不到)}=p_1\times p_2\dots\times p_n

對於除法取餘,就是求逆元,這裏用費馬小定理即可。

時間複雜度:nlog(mod)nlog(mod)

附上nn個獨立事件和概率公式:
在這裏插入圖片描述

AC代碼:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
int a[N],b[N];
ll ksm(ll a,ll n){
    ll ans=1;
    while(n){
        if(n&1) ans=ans*a%mod;
        a=a*a%mod;
        n>>=1;
    }
    return ans;
}
ll inv(ll a,ll b){
    return a*ksm(b,mod-2)%mod;
}
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    for(int i=0;i<n;i++) scanf("%d",&b[i]),b[i]=a[i]-b[i];
    ll ans=1;
    for(int i=0;i<n;i++)
          ans=ans*inv(b[i],a[i])%mod;
    printf("%lld\n",(mod+(1-ans))%mod);   
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章