有乙個箱子,開始時有n個黑球,m個藍球。每一輪遊戲規則如下:
第一步:奕奕有p的概率往箱子裡新增乙個黑球,有(1-p)的概率往箱子裡新增乙個藍球。
第二步:華華隨機從箱子裡取出乙個球。
華華喜歡黑球,他想知道k輪遊戲之後箱子裡黑球個數的期望。
輸入五個整數n,m,k,a,b。1<=n,m<=1e6,1<=k<=1e9
其中p=abab,且a<=b,0<=a<1e9+7,0示例1
2 2 1 1 2
2示例2
2 2 2 3 10
184000003
題意:如上思路:求期望題目,一遍是逆推,但是這個好像推不出?看了題解後,我推出來的式子和題解一樣,但是過程貌似有點出入,後面再研究研究了。我的思路是,對於第i天的黑球期望 dp[i] = dp[i-1] + p*1 - (dp[i-1] + p*1)(m+n+1),直觀上理解,第i天黑球期望等於前一天的期望數加上第一步取得黑球的期望 p*1 ,再減去第二步取出黑球的期望,注意到無論哪一輪,第二步的時候總球數一定是n+m+1,則隨機取到黑球期望為 (dp[i-1] + p*1)/(n+m+1)*1。就可以推到dp[i]了。化簡後可以用矩陣快速冪算,進一步化簡後只需算乙個等比數列,用快速冪推就可以了。
題解思路:
注意:本題學的東西還是挺多的,主要是逆元和模方面的細節,以前雖然知道但是沒有做過,感覺還是不一樣。含模運算過程如果有減法一定要(a-b)%mod = ((a%mod-b%mod)+mod)%mod,不然會出錯。
#include#include#include#include#include#include#include#include#include#include#define rep(i,e) for(int i=0;i
#define rep1(i,e) for(int i=1;i<=(e);++i)
#define repx(i,x,e) for(int i=(x);i<=(e);++i)
#define pii pair#define x first
#define y second
#define pb push_back
#define mp make_pair
#define mset(var,val) memset(var,val,sizeof(var))
#define scd(a) scanf("%d",&a)
#define scdd(a,b) scanf("%d%d",&a,&b)
#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define ios ios::sync_with_stdio(false);cin.tie(0)
typedef long long ll;
using namespace std;
#ifdef local
templatevoid dbg(t t)
return r;
}int main()
華華跟奕奕玩遊戲 數學期望遞推式
有乙個箱子,開始時有n個黑球,m個藍球。每一輪遊戲規則如下 第一步 奕奕有p的概率往箱子裡新增乙個黑球,有 1 p 的概率往箱子裡新增乙個藍球。第二步 華華隨機從箱子裡取出乙個球。華華喜歡黑球,他想知道k輪遊戲之後箱子裡黑球個數的期望。輸入五個整數n,m,k,a,b。1 n,m 1e6,1 k 1e...
牛客練習賽46 A 華華教奕奕寫幾何 二分
給出紅色部分面積,求大圓的最短直徑 兩小圓直徑之和等於大圓直徑 or zwyc xyy dala oorz wyc,xyyd alao 反正我是沒有看出開個根號就好了。先把問題轉化為圓中的問題。此時紅色部分面積就為2s2 s了。而所有圓的直徑不變。設兩個小圓的直徑分別為x,y x,y,大圓的直徑為m...
牛客練習賽17 F 玩遊戲 強大的思維能力博弈
傳送門 這題的 關鍵在於 如果一 直和對手 取相反方 向的位置 color這題的關鍵在於,如果一直和對手取相反方向的位置 這題的關鍵在 於,如果 一直和對 手取相反 方向的位 置 最 後得 到的位置 會是乙個 定值,根 據這個去 分類討論 color最後得到的位置會是乙個定值,根據這個去分類討論。最...