记录编号 |
336366 |
评测结果 |
AAAAAAAAA |
题目名称 |
小白 |
最终得分 |
100 |
用户昵称 |
Hzoi_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
*/