记录编号 336366 评测结果 AAAAAAAAA
题目名称 小白 最终得分 100
用户昵称 GravatarHzoi_Go灬Fire 是否通过 通过
代码语言 C++ 运行时间 4.634 s
提交时间 2016-11-03 08:08:14 内存使用 0.70 MiB
显示代码纯文本
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
#define LL unsigned long long
const int maxn=1001;
const LL temp=10000000000000ll;
struct Bigint {
	LL a[50];
	void Init(int x){a[0]=1;a[1]=x;}
	void Print(){
		printf("%llu",a[a[0]]);
		for(int i=a[0]-1;i>=1;i--)printf("%013llu",a[i]);
	}
	Bigint operator + (const Bigint & b)const{
		Bigint c;memset(c.a,0,sizeof(c.a));
		c.a[0]=max(a[0],b.a[0]);
		for(int i=1;i<=c.a[0];i++){
			c.a[i]+=a[i]+b.a[i];
			if(c.a[i]>temp){
				c.a[i+1]+=c.a[i]/temp;
				c.a[i]%=temp;
			}
		}
		while(c.a[c.a[0]+1]!=0)c.a[0]++;
		while(c.a[0]>1 && c.a[c.a[0]]==0)c.a[0]--;
		return c;
	}
	Bigint operator * (const LL & date)const{ 
		Bigint b;memset(b.a,0,sizeof(b.a));
		b.a[0]=a[0];
		for(LL i=1;i<=a[0];i++)b.a[i]=a[i]*date;
		for(LL i=1;i<=b.a[0];i++){
			if(b.a[i]>temp-1){
				b.a[i+1]+=b.a[i]/temp;
				b.a[i]%=temp;
				if(i==b.a[0])b.a[0]++;
			}
		}
		while(b.a[0]>1 && b.a[b.a[0]]==0)b.a[0]--;
		return b;
	}
};
int n,m,a[maxn];
Bigint f[maxn];
void Init();

int main(){
	freopen("white.in","r",stdin);
	freopen("white.out","w",stdout);
    Init();
    getchar();getchar();
    return 0;
}
void Init(){
	scanf("%d%d",&n,&m);
	for(int i=0;i<m-1;i++)scanf("%d",&a[i]);
	bool t=0;
	f[0].a[0]=2;f[0].a[1]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			f[j]=f[j]+f[j-1];
		}
	}
	Bigint ans,now;ans.Init(0);
	for(int i=0;i<m-1;i++){
		f[i]=f[i]*a[i];
		ans=ans+f[i];
	}
	ans.Print();
}
/*
2 1::1
2 2::2
2 3::3
2 4::4
3 1::1
3 2::3
3 3::6
3 4::10
4 1::1
4 2::4
4 3::10
4 4::20
 --- 2 --- 4 --- 0 --- 20  
 26
*/