Description
Analysis
直接边读边做,强制放一个在序列末端,其他的方案数模型就转成n个盒子,m个球,放球,盒子可为空求方案数,用组合数解决即可。
Code
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=600010,mo=998244353;
ll fac[N];
ll qmi(ll x,ll n)
{
ll t=1;
for(;n;n>>=1)
{
if(n&1==1) t=t*x%mo;
x=x*x%mo;
}
return t;
}
ll ny(ll x)
{
return qmi(x,mo-2);
}
ll C(ll m,ll n)
{
return fac[m]*ny(fac[n])%mo*ny(fac[m-n])%mo;
}
int main()
{
fac[0]=1;
for(int i=1;i<=600000;i++) fac[i]=fac[i-1]*i%mo;
int n;
ll x,s=0,ans=1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&x);
ans=ans*C(s+x-1,x-1)%mo;
s+=x;
}
printf("%lld",ans);
return 0;
}