记录编号 146712 评测结果 AAAAAAAAAA
题目名称 [FJOI 2007] 轮状病毒 最终得分 100
用户昵称 Gravatarnew 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();
}