记录编号 254270 评测结果 AAAAAAAAAA
题目名称 [HAOI 2016]放棋子 最终得分 100
用户昵称 GravatarKZNS 是否通过 通过
代码语言 C++ 运行时间 0.005 s
提交时间 2016-04-24 17:53:37 内存使用 0.62 MiB
显示代码纯文本
//KZNS
#include <fstream>
#include <cstring>
using namespace std;
//
ifstream fin ("chess_2016.in");
ofstream fout ("chess_2016.out");
class poi {
public:
	int s[400];
	poi() {
		memset(s, 0, sizeof(s));
	}
	poi(int x) {
		memset(s, 0, sizeof(s));
		for (int i = 0; x; i++) {
			s[i] = x%10;
			x /= 10;
		}
	}
}ed;
inline poi operator + (const poi &a, const poi &b) {
	poi c;
	for (int i = 0; i < 399; i++) {
		c.s[i] += a.s[i] + b.s[i];
		c.s[i+1] += c.s[i]/10;
		c.s[i] %= 10;
	}
	return c;
}
inline poi operator * (const int a, poi b) {
	for (int i = 0; i < 399; i++)
		b.s[i] *= a;
	for (int i = 0; i < 399; i++) {
		b.s[i+1] += b.s[i]/10;
		b.s[i] %= 10;
	}
	return b;
}
//
int N;
poi d[203];
bool dd[203] = {false};
//
poi D(int x) {
	if (dd[x])
		return d[x];
	else {
		dd[x] = true;
		d[x] = (x-1)*(D(x-1)+D(x-2));
		return d[x];
	}
}
void prt() {
	int i = 399;
	for (; !(ed.s[i]); i--);
	for (; i >= 0; i--)
		fout << ed.s[i];
}
//
int main() {
	fin >> N;
	d[1] = poi(0);
	d[2] = poi(1);
	dd[1] = true;
	dd[2] = true;
	ed = D(N);
	prt();
	return 0;
}
//UBWH