记录编号 394701 评测结果 AAAAAAAAAA
题目名称 [HAOI 2016]放棋子 最终得分 100
用户昵称 GravatarJustWB 是否通过 通过
代码语言 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;
 }