记录编号 |
146712 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[FJOI 2007] 轮状病毒 |
最终得分 |
100 |
用户昵称 |
new ioer |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2015-01-19 10:02:33 |
内存使用 |
1.96 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
const int mod=10;
struct bint{
int len;
int num[100];
bint(){
len=1;
memset(num,0,sizeof(num));
}
bint operator + (int x){
bint b;
for(int i=1;i<=len;i++){
b.num[i]+=num[i]*x;
b.num[i+1]+=b.num[i]/mod;
b.num[i]%=mod;
}
if(b.num[len+1]) b.len=len+1;
else b.len=len;
return b;
}
bint operator - (bint a){
bint b;
for(int i=1;i<=len;i++){
b.num[i]+=num[i]-a.num[i];
if(b.num[i]<0) b.num[i]+=mod,b.num[i+1]--;
}
if(b.num[len]) b.len=len;
else b.len=len-1;
return b;
}
bint operator * (bint a){
bint b;
for(int i=1;i<=len;i++){
int t=0;
for(int j=1;j<=a.len;j++){
int &k=b.num[i+j-1];
k+=num[i]*a.num[j]+t;
t=k/mod,k%=mod;
}
if(t) b.num[i+a.len]+=t;
}
if(b.num[len+a.len]) b.len=len+a.len;
else b.len=len+a.len-1;
return b;
}
void print(){
printf("%d",num[len]);
for(int i=len-1;i;i--)
printf("%d",num[i]);
}
};
int main(){
freopen("bzoj_1002.in", "r", stdin);
freopen("bzoj_1002.out", "w", stdout);
int n;
bint f[101];
scanf("%d",&n);
f[1].num[1]=1,f[2].num[1]=1,f[3].num[1]=4;
for(int i=4;i<=n;i++) f[i]=f[i-2]+3-f[i-4];
f[n]=f[n]*f[n];
if(~n&1) f[n]=f[n]+5;
f[n].print();
}