记录编号 |
254045 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2016]放棋子 |
最终得分 |
100 |
用户昵称 |
Fancy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.004 s |
提交时间 |
2016-04-24 14:53:34 |
内存使用 |
0.37 MiB |
显示代码纯文本
#include <cstring>
#include <cstdio>
using namespace std;
const int mod=1e5;
int n;
long long g[25];
struct node{
int len,a[100];
}f[205];
node operator + (const node &x,const node &y)
{
node z;
z.len=0;memset(z.a,0,sizeof(z.a));
for(int i=1;i<=x.len||i<=y.len;i++)
{
z.a[i]+=x.a[i]+y.a[i];
if(z.a[i]>=mod)
{
z.a[i+1]=z.a[i]/mod;
z.a[i]%=mod;
}
while(z.a[z.len+1]) z.len++;
}
return z;
}
node operator * (const node &x,const int y)
{
node z;
z.len=0;memset(z.a,0,sizeof(z.a));
for(int i=1;i<=x.len;i++)
{
z.a[i]+=x.a[i]*y;
if(z.a[i]>=mod)
{
z.a[i+1]=z.a[i]/mod;
z.a[i]%=mod;
}
while(z.a[z.len+1]) z.len++;
}
return z;
}
void Out_Put(node x)
{
printf("%d",x.a[x.len]);
for(int i=x.len-1;i>0;i--)
printf("%05d",x.a[i]);
printf("\n");
}
int main()
{
freopen("chess_2016.in","r",stdin);
freopen("chess_2016.out","w",stdout);
scanf("%d",&n);
f[2].len=1;f[2].a[1]=1;
for(int i=3;i<=200;i++)
f[i]=(f[i-1]+f[i-2])*(i-1);
Out_Put(f[n]);
}