比赛 |
Asm_Def战记之透明计算网络 |
评测结果 |
TTTTTTTTTT |
题目名称 |
Asm_Def的模拟赛 |
最终得分 |
0 |
用户昵称 |
前鬼后鬼的守护 |
运行时间 |
20.000 s |
代码语言 |
C++ |
内存使用 |
38.95 MiB |
提交时间 |
2015-11-01 11:58:51 |
显示代码纯文本
#include<cstdio>
typedef long long ll;
const ll mod=998244353LL;
inline int read(){
int x=0;char ch=getchar();while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+ch-'0',ch=getchar();return x;
}
int k,sum[1010];
ll f[5010][1010];
int p[10010],tot;bool not_p[10010];
void pre(){
for(int i=2;i<=sum[k];i++)if(!not_p[i]){
p[tot++]=i;
for(int t=i*i;t<=sum[k];t+=i)not_p[t]=true;
}
p[tot]=1<<30;
}
inline ll P(int x,int y){if(x<sum[y])return 0;
int n=x-1-sum[y-1],m=sum[y]-sum[y-1]-1;
ll ans=1;
for(int i=0;p[i]<=n;i++){
int e=0;
for(int t=p[i];t<=n;t*=p[i])
e+=n/t-m/t-(n-m)/t;
for(int base=p[i];e;e>>=1){
if(e&1)ans=ans*base%mod;
base=base*base;
}
}
return ans;
}
int main(){
freopen("asm_formation.in","r",stdin);freopen("asm_formation.out","w",stdout);
k=read();for(int i=1;i<=k;i++)sum[i]=sum[i-1]+read();
if(sum[k]>10000){printf("%d");return 0;}pre();
for(int i=1;i<=sum[k];i++)f[i][0]=1;
for(int i=1;i<=sum[k];i++)
for(int j=1;j<=k;j++)
f[i][j]=(f[i-1][j-1]*P(i,j)%mod+f[i-1][j])%mod;
printf("%d",f[sum[k]][k]);
return 0;
}