记录编号 |
232387 |
评测结果 |
AAAAAAAAA |
题目名称 |
小白 |
最终得分 |
100 |
用户昵称 |
liu_runda |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
3.526 s |
提交时间 |
2016-03-01 06:22:31 |
内存使用 |
9.17 MiB |
显示代码纯文本
#include<cstdio>
#include<ctime>
unsigned long long ans[1005][1500];//高精滚动数组
void add(unsigned long long a[],unsigned long long b[]){
if(a[0]>b[0])b[0]=a[0];
for(int i=1;i<a[0];++i)b[i]+=a[i];
for(int i=1;i<b[0];++i){
if(b[i]>999999999){
b[i+1]+=b[i]/1000000000;
b[i]%=1000000000;
if(i==b[0]-1)b[0]++;
}
}
}
void mult(unsigned long long a[],int x){
for(int i=1;i<a[0];++i)a[i]*=x;
for(int i=1;i<a[0];++i){
if(a[i]>999999999){
a[i+1]+=a[i]/1000000000;
a[i]%=1000000000;
if(i==a[0]-1)a[0]++;
}
}
}
void print(unsigned long long a[],char ch)
{
printf("%d",a[a[0]-1]);
for(int i=a[0]-2;i;--i)printf("%09d",a[i]);
printf("%c",ch);
}
int main(){
freopen("white.in","r",stdin);
freopen("white.out","w",stdout);
int n,m;scanf("%d %d",&n,&m);
ans[0][1]=1;ans[0][0]=2;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
add(ans[j-1],ans[j]);
}
}
int tmp;
for(int i=0;i<m-1;++i){
scanf("%d",&tmp);
mult(ans[i],tmp);
}
for(int i=1;i<m-1;++i)add(ans[i-1],ans[i]);
print(ans[m-2],'\n');
fclose(stdin);fclose(stdout);
return 0;
}