记录编号 232387 评测结果 AAAAAAAAA
题目名称 小白 最终得分 100
用户昵称 Gravatarliu_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;
}