小a的强迫症

小a的强迫症

其实很简单

就是每个颜色i在前面的所有珠子中选 num[i]-1个位置,(C(sum num[i] ~-1,num[i]-1))

#include <iostream>
#include <cstdio>
using namespace std;
#define int long long 
const int mod=998244353; 
const int N=500005; 
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
	return f*x;
}
int n,x,sum,ans=1;
int fac[N],inv[N];
int qpow(int a,int b) {
    int res=1;
    while(b) {
        if(b&1) res=res*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    return res%mod;
}
int C(int n,int m) {
    return fac[n]*inv[m]%mod*inv[n-m]%mod;
}

signed main() {
    n=read();
    fac[1]=1;
    for(int i=2;i<=N;i++) fac[i]=fac[i-1]*i%mod;
    inv[N]=qpow(fac[N],mod-2);
    for(int i=N;i;i--) inv[i-1]=inv[i]*i%mod;
    sum=read();
    for(int i=2;i<=n;i++) {
        x=read();sum+=x-1;
        ans=ans*C(sum,x-1)%mod;
        sum++;
    }
    printf("%lld
",ans);
    return 0;
}
/*
3
2 2 1
*/

原文地址:https://www.cnblogs.com/ke-xin/p/13619507.html