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