记录编号 272475 评测结果 AAAAAAAAAA
题目名称 [ZJOI 2012] 数列 最终得分 100
用户昵称 GravatarTenderRun 是否通过 通过
代码语言 C++ 运行时间 0.035 s
提交时间 2016-06-16 21:46:21 内存使用 0.32 MiB
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=110;
struct ExtInt{
	int a[maxn],len;
	ExtInt(){
		memset(a,0,sizeof(a));
		len=1;
	}
	void clear(){
		memset(a,0,sizeof(a));
		len=1;
	}
	int operator [](int x){
		return a[x];
	}
	void Print(){
		for(int i=len;i>=1;i--)
			printf("%d",a[i]);
		printf("\n");	
	}
}ans,F;



ExtInt operator /(ExtInt a,int x){
	ExtInt ret;
	for(int i=a.len,tot=0;i>=1;i--){
		tot=tot*10+a[i];
		ret.a[i]=tot/x;
		tot%=x;
	}
	ret.len=a.len;
	while(!ret[ret.len]&&ret.len>1)ret.len-=1;
	return ret;	
}

ExtInt operator +(ExtInt a,int x){
	ExtInt ret;
	for(int i=1,in=0;i<=a.len||in;i++){
		ret.a[i]=a[i]+in+x%10;x/=10;
		in=ret.a[i]/10;ret.a[i]%=10;
	}
	ret.len=a.len+1;
	while(!ret[ret.len]&&ret.len>1)ret.len-=1;
	return ret;
}
ExtInt operator +(ExtInt a,ExtInt x){
	ExtInt ret;
	for(int i=1,in=0;i<=max(a.len,x.len)||in;i++){
		ret.a[i]=in+a[i]+x.a[i];
		in=ret.a[i]/10;ret.a[i]%=10;
	}
	ret.len=max(a.len,x.len)+1;
	while(!ret[ret.len]&&ret.len>1)ret.len-=1;
	return ret;
}

ExtInt p,q;
void Solve(ExtInt x){
	if(x[1]==1&&x.len==1){
		p=x;q.clear();
		return;
	}
	Solve((x+1)/2);
	if(x[1]&1)p=p+q;
	else q=p+q;  
}

char s[maxn];
int main(){
	freopen("sequencezj.in","r",stdin);
	freopen("sequencezj.out","w",stdout);
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%s",s+1);
		int len=strlen(s+1);
		for(int i=1;i<=len;i++)
			F.a[len-i+1]=s[i]-'0';
		F.len=len;	
		Solve(F);
		p.Print();	
	}
	return 0;
}