【題解】2021牛客暑期多校第四場 B.Sample Game


2021牛客暑期多校第四場 Sample Game

題意

有一個隨機數生成器,生成數\(x\)的概率為\(p_x\)。現在我們進行如下操作直至結束:

\(1\) 隨機生成一個數\(x\)

\(2\) 如果已經生成的數中沒有比\(x\)更大的數,則返回操作\(1\),否則,記當前已經生成的數的個數為\(z\),則得到\(z^2\)分,操作結束。

求得分的期望。

\(2\le n\le 100\)

題解

容易發現,如果操作沒有停止,則已經生成的數一定是類似於\(1,1,2,3,4,5,5...\)(按生成順序排列)這樣的非遞減序列。設\(X\)為已經生成的數的個數,則\(X\)\(\Bbb{N}\)上的離散隨機變量。記\(g_i=P(X>i)\),即長度為\(i\)時還沒有停止的概率。下面考慮如何計算\(P(X>i)\),假設當前長度為\(L\),數\(x\)的出現次數為\(cnt_x\),由於這些數的出現次序是固定的,故有

\[P(X>L)=\sum\prod_{\sum cnt_x=L}p_x^{cnt_x} \]

\(\{g_i\}\)對應的生成函數為

\[\begin{align} G(x)=\sum_{i=0}^{\infty}g_ix^i=\sum_{i=0}^{\infty}P(X>i)x^i=\prod_{k=1}^{n}\sum_{i=0}^{\infty}p_k^ix^i=\prod_{k=1}^{n}\frac{1}{1-p_kx} \end{align} \]

則得分的期望為

\[\begin{align} E&=\sum_{i=1}^{\infty}P(X=i)i^2\\ &=\sum_{i=1}^{\infty}(P(X\ge i)-P(X\ge i+1))i^2\\ &=\sum_{i=0}^{\infty}(P(X> i)-P(X> i+1))(i+1)^2\\ &=\sum_{i=0}^{\infty}P(X> i)(i+1)^2-\sum_{i=0}^{\infty}P(X> i+1)(i+1)^2\\ &=\sum_{i=0}^{\infty}P(X> i)(i+1)^2-\sum_{i=1}^{\infty}P(X> i)i^2\\ &=\sum_{i=0}^{\infty}P(X> i)(i+1)^2-\sum_{i=0}^{\infty}P(X> i)i^2\\ &=\sum_{i=0}^{\infty}P(X> i)((i+1)^2-i^2)\\ &=\sum_{i=0}^{\infty}P(X> i)(2i+1)\\ &=2G'(1)+G(1).\\ \end{align} \]

由於

\[\frac{G'(x)}{G(x)}=[\ln G(x)]'=[\sum_{k=1}^{n}\ln \frac{1}{1-p_kx}]'=\sum_{k=1}^{n}\frac{p_k}{1-p_kx}, \]

\[G'(x)=G(x)\sum_{k=1}^{n}\frac{p_k}{1-p_kx}. \]

#include <bits/stdc++.h>
using namespace std;
using ll=long long ;
const ll M=998244353;
ll ans=1,a[102];
int n;
ll pm(ll x,ll b){x%=M;ll res=1;while(b){if(b&1)res=res*x%M;x=x*x%M;b>>=1;}return res;}
void f1(){
	cin>>n;
	ll na=0,ans=1,res=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];na+=a[i];na%=M;
	}
	ll inv=pm(na,M-2);
	for(int i=1;i<=n;i++){
		a[i]=a[i]*inv%M;
		ll tmp=pm(1+M-a[i],M-2);
		res+=tmp*a[i]%M;
		res%=M;
		ans=ans*tmp%M;
	}
	res=(res*2%M+1)%M;
	ans=ans*res%M;
	cout<<ans;
}
int main(){
	f1();
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM