牛客寒假算法基礎集訓營4 F Applese 的大獎
阿新 • • 發佈:2019-02-03
http val adding == div pow 如果 求逆 lns
僅一行三個正整數 n, k, x,分別表示參與抽獎的總人數(包括Applese),中獎的人數和 Applese 獲得的隨機數。
輸出一個正整數表示 Applese 中獎的概率 mod 1e9+7
首先是推出公式,在dalao的幫助下 理解了
枚舉0 ~ k-1 ,因為 App 中獎了 然後就是 p1^i p2^(n-i-1)
其中 p1 為 小於等於 x 的概率
由於涉及除法取摸,需要求逆元。
逆元就是 A*B-1 == 1 (mod p) 把除法換成乘法
先學習了其中一個方法。 如果 a與p互質 可以用 費馬小定理
ap-1 == 1 (mod p)
所以 上式可以寫為 a*ap-2 == 1 (mod p)
那麽 a的逆元就是 ap-2
鏈接:https://ac.nowcoder.com/acm/contest/330/H
來源:牛客網
Applese 和它的小夥伴參加了一個促銷的抽獎活動,活動的規則如下:有一個隨機數生成器,能等概率生成 0∼99
僅一行三個正整數 n, k, x,分別表示參與抽獎的總人數(包括Applese),中獎的人數和 Applese 獲得的隨機數。
輸出一個正整數表示 Applese 中獎的概率
1 #include<bits/stdc++.h> 2using namespace std; 3 typedef long long ll; 4 const int mod=1e9+7; 5 6 ll powm(ll a,ll b=mod-2) { 7 ll sum=1,tmp=a%mod; 8 while(b) { 9 if(b&1) sum=sum*tmp%mod; 10 tmp=tmp*tmp%mod; 11 b>>=1; 12 } 13 return sum; 14 } 15 16 int main() {17 int n,k,x; 18 ll val=powm(100); 19 scanf("%d%d%d",&n,&k,&x); 20 ll p1=(x+1)*val%mod; 21 ll p2=(99-x)*val%mod; 22 ll c=1,ans=0; 23 for(int i=0;i<k;i++) { 24 ans=ans+c*powm(p1,i)%mod*powm(p2,n-1-i)%mod; 25 ans=ans%mod; 26 c=c*(n-i-1)%mod*powm(i+1)%mod; 27 } 28 printf("%lld",ans); 29 }
牛客寒假算法基礎集訓營4 F Applese 的大獎