专栏文章

[ABC231G] Balls in Boxes

AT_abc231_g题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqnwnbq
此快照首次捕获于
2025/12/04 07:52
3 个月前
此快照最后确认于
2025/12/04 07:52
3 个月前
查看原文

[ABC231G] Balls in Boxes

题解

我们记 bib_iii 被选中的次数,那么期望得分为
1nkb1+b2++bn=k(nb1,b2,,bn)i=1n(ai+bi)\frac{1}{n^k}\sum\limits_{b_1+b_2+\dots+b_n=k}\dbinom{n}{b_1,b_2,\dots,b_n}\prod\limits_{i=1}^n(a_i+b_i)
=k!nkb1,b2,,bni=1nai+bibi!=\frac{k!}{n^k}\sum\limits_{b_1,b_2,\dots,b_n}\prod\limits_{i=1}^n\frac{a_i+b_i}{b_i!}
考虑构造 EGF:
F^i(x)=j=0ai+jj!xj\hat F_i(x)=\sum\limits_{j=0}^{\infin}\frac{a_i+j}{j!}x^j
=aij=01j!xj+j=01(j1)!xj=a_i\sum\limits_{j=0}^{\infin}\frac{1}{j!}x^j+\sum\limits_{j=0}^{\infin}\frac{1}{(j-1)!}x^j
=aiex+xex=a_ie^x+xe^x
=(ai+x)ex=(a_i+x)e^x
那么答案转化为:
[xk](k!nki=1nF^i(x))[x^k]\left(\frac{k!}{n^k}\prod\limits_{i=1}^n\hat F_i(x)\right)
=[xk](k!nkenxi=1n(ai+x))=[x^k]\left(\frac{k!}{n^k}e^{nx}\prod\limits_{i=1}^n(a_i+x)\right)
我们把 i=1n(ai+x)\prod\limits_{i=1}^n(a_i+x) 展开成 i=0ncixi\prod\limits_{i=0}^{n}c_ix^i。这一步可以 O(n2)O(n^2) 暴力做,也可以用一些多项式做法做到 O(nlog2n)O(n\log^2n)
再把 ee 展开,答案为:
=k!nki=0min(n,k)cinki(ki)!=\frac{k!}{n^k}\sum\limits_{i=0}^{\min(n,k)}c_i\frac{n^{k-i}}{(k-i)!}
=i=0min(n,k)cikini=\sum\limits_{i=0}^{\min(n,k)}c_ik^{\underline{i}}n^{-i}

代码

CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1010,mod=998244353;
ll n,k,c[N],a[N];
ll qpow(ll x,ll y){
	ll ret=1;
	while(y){
		if(y&1)ret=ret*x%mod;
		x=x*x%mod;
		y>>=1; 
	}
	return ret;
}
int main(){
	cin>>n>>k;
	c[0]=1;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		for(int j=n;j;j--)c[j]=(a[i]*c[j]+c[j-1])%mod;
		c[0]=c[0]*a[i]%mod;
	}
	ll ans=0,fac=1,p=1,inv=qpow(n,mod-2);
	for(int i=0;i<=min(n,k);i++){
		ans=(ans+c[i]*fac%mod*p%mod)%mod;
		fac=fac*(k-i)%mod;p=p*inv%mod;
	}
	cout<<ans;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...