记录编号 |
394701 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2016]放棋子 |
最终得分 |
100 |
用户昵称 |
JustWB |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.006 s |
提交时间 |
2017-04-14 08:59:09 |
内存使用 |
0.70 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
char a[2]="1",b[2]="2";
struct bignum
{
int sum[500];
int w;
bignum(){memset(sum,0,sizeof(sum));w=0;}
bignum operator = (const char *N)
{
w=strlen(N);
for(int i=0;i<w;i++)
{
sum[w-i-1]=N[i]-48;
}
return *this;
}
bignum operator + (const bignum&N)
{
bignum l;
l.w=max(w,N.w);
for(int i=0;i<l.w;i++)
{
l.sum[i]+=sum[i]+N.sum[i];
if(l.sum[i]>=10)
{
l.sum[i]%=10;
l.sum[i+1]++;
}
if(i+1==l.w&&l.sum[l.w]!=0)
{
l.w++;continue;
}
}
return l;
}
bignum operator * (const int&N)
{
bignum l;
l.w=w;
for(int i=0;i<l.w;i++)
{
l.sum[i]+=sum[i]*N;
if(l.sum[i]>=10)
{
int m=l.sum[i]/10;
l.sum[i]%=10;
l.sum[i+1]+=m;
}
}
while(l.sum[l.w]!=0)
{
int m=l.sum[l.w]/10;
l.sum[l.w]%=10;
l.sum[l.w+1]+=m;
l.w++;
}
return l;
}
void print()
{
for(int i=w-1;i>=0;i--)
{
cout<<sum[i];
}
}
} all[201];
int main()
{
freopen("chess_2016.in","r",stdin);
freopen("chess_2016.out","w",stdout);
scanf("%d",&n);
all[2]=a;all[3]=b;
for(int i=4;i<=n;i++)
{
all[i]=(all[i-1]+all[i-2])*(i-1);
}
all[n].print();
return 0;
}