【学习笔记】[AGC038E] Gachapon
学好数学
首先 min-max \text{min-max} min-max容斥: E ( max  ( S ) ) = ∑ T ⊆ S ( − 1 ) ∣ T ∣ + 1 E ( min  ( T ) ) E(\max(S))=\sum_{T\subseteq S}(-1)^{|T|+1}E(\min(T)) E(max(S))=∑T⊆S(−1)∣T∣+1E(min(T))
考虑枚举集合 T T T,假设每次得到的都是 T T T里面的数,其期望可以转化为 K K K轮后仍没有卡牌被抽到的概率之和。注意到每一轮后都会得到一张卡牌,因此是有限项求和。注意到 ∑ A i \sum A_i ∑Ai比较小,可以考虑暴力枚举轮数来计算。
具体的,答案是 ∏ i ∈ T ( A i ∑ A i ) c i K ! c 1 ! c 2 ! . . . c ∣ T ∣ ! \prod_{i\in T}(\frac{A_i}{\sum A_i})^{c_i}\frac{K!}{c_1!c_2!...c_{|T|}!} i∈T∏(∑AiAi)cic1!c2!...c∣T∣!K!
其中 ∑ c i = K , c i < b i \sum c_i=K,c_i<b_i ∑ci=K,ci<bi。
不难将式子写成 K ! ( 1 ∑ A i ) K ∏ i ∈ T A i c i c i ! K!(\frac{1}{\sum A_i})^K\prod_{i\in T}\frac{A_i^{c_i}}{c_i!} K!(∑Ai1)Ki∈T∏ci!Aici
设 f j , k f_{j,k} fj,k表示 ∑ A i = j \sum A_i=j ∑Ai=j, ∑ c i = k \sum c_i=k ∑ci=k时贡献之和。每次考虑新加入一个元素进去,这个元素的贡献是 A i c i c i ! \frac{A_i^{c_i}}{c_i!} ci!Aici,写成卷积的形式 f j , k = ∑ f j − A i , k − c i A i c i c i ! f_{j,k}=\sum f_{j-A_i,k-c_i}\frac{A_i^{c_i}}{c_i!} fj,k=∑fj−Ai,k−cici!Aici,不难暴力卷积做到 O ( ∑ A i ( ∑ B i ) 2 ) O(\sum A_i(\sum B_i)^2) O(∑Ai(∑Bi)2)。
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int mod=998244353;
int n,a[405],b[405];
ll f[405][405],fac[405],inv[405],res;
ll fpow(ll x,ll y=mod-2){
	ll z(1);
	for(;y;y>>=1){
		if(y&1)z=z*x%mod;
		x=x*x%mod;
	}return z;
}
void add(ll &x,ll y){
	x=(x+y)%mod;
}
void init(int n){
	fac[0]=1;for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod;
	inv[n]=fpow(fac[n]);for(int i=n;i>=1;i--)inv[i-1]=inv[i]*i%mod;
}
signed main(){
	cin>>n,init(400);for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
	f[0][0]=-1;int s1=0,s2=0;
	for(int i=1;i<=n;i++){
		for(int j=s1;j>=0;j--){
			for(int k=0;k<=s2;k++){
				ll M=1;
				for(int l=0;l<b[i];l++){
					add(f[j+a[i]][k+l],-f[j][k]*M%mod*inv[l]%mod);
					M=M*a[i]%mod;
				}
			}
		}s1+=a[i],s2+=b[i];
	}
	for(int i=1;i<=s1;i++){
		ll M=fpow(i);
		for(int j=0;j<=s2;j++){
			res=(res+fac[j]*M%mod*s1%mod*f[i][j]%mod)%mod;
			M=M*fpow(i)%mod;
		}
	}cout<<(res+mod)%mod;
}

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号