比赛 |
Asm_Def战记之透明计算网络 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Asm_Def排兵布阵 |
最终得分 |
100 |
用户昵称 |
AAAAAAAAAA |
运行时间 |
0.059 s |
代码语言 |
C++ |
内存使用 |
8.32 MiB |
提交时间 |
2017-08-29 20:40:45 |
显示代码纯文本
#include<bits/stdc++.h>
#define MAXN 100010
#define MOD 998244353
#define LL long long
using namespace std;
int K,num[MAXN];
LL fac[500010],inv[500010];//fac[i]表示i的阶乘,inv[i]表示i的阶乘的逆元
LL Quick_Pow(LL a,LL b){
LL x=1;
while(b){
if(b&1)x=(x*a)%MOD;
a=(a*a)%MOD;
b>>=1;
}
return x;
}
void Inverse(){
fac[0]=1;
for(int i=1;i<=num[K];i++)fac[i]=(fac[i-1]*i)%MOD;
inv[num[K]]=Quick_Pow(fac[num[K]],MOD-2);
for(int i=num[K]-1;i>=0;i--){inv[i]=(inv[i+1]*(i+1))%MOD;}
}
int main(){
freopen("asm_formation.in","r",stdin);
freopen("asm_formation.out","w",stdout);
LL ans=1;
scanf("%d",&K);
for(int i=1;i<=K;i++){scanf("%d",&num[i]);num[i]+=num[i-1];}
Inverse();
for(int i=2;i<=K;i++){
ans=(ans*fac[num[i]-1])%MOD;
ans=(ans*inv[num[i-1]])%MOD;
ans=(ans*inv[num[i]-1-num[i-1]])%MOD;
}
printf("%lld",ans);
return 0;
}