记录编号 32808 评测结果 AAAAAAAAAA
题目名称 产生01串 最终得分 100
用户昵称 GravatarQhelDIV 是否通过 通过
代码语言 C++ 运行时间 0.354 s
提交时间 2011-11-08 15:39:51 内存使用 0.34 MiB
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fin("infinit.in");
ofstream fout("infinit.out");
unsigned long long  f[94],g[94],Q;//f[i]表示第i斐波纳契数列的长度,g[i]表示第i项斐波纳契数列含有几个1
unsigned long long St[5002],En[5002],Final;
void init()
{
unsigned long long i;	
	f[1]=1;f[0]=1;
	g[1]=1;g[0]=0;
	for(i=2;i<=93;i++)
	{
		f[i]=f[i-1]+f[i-2];
		g[i]+=g[i-1]+g[i-2];
	}
	fin>>Q;
	for(i=1;i<=Q;i++)
		fin>>St[i]>>En[i];
}

unsigned long long divide(unsigned long long O)
{
unsigned long long i,Sum=0;
	if(O==1)
		return 1;
	if(O==0)
		return 0;
	for(i=1;i<=93;i++)
		if(f[i]> O)
			break;
		else
			if(f[i]==O)
				return g[i];
	Sum=divide(f[i-1])+divide(O-f[i-1]);
	return Sum;
}

void find()
{
unsigned long long i,k,S1,S2,n1,n2,b1,b2;	
	for(i=1;i<=Q;i++)
	{
		b1=divide(St[i]-1);//查询1~St[i]-1有几个1(闭区间)
		b2=divide(En[i]);//查询1~En[i]有几个1(闭区间)
		Final=b2-b1;
		fout<<Final<<endl;
	}
}

int main()
{
	init();	
	
	find();
	
	fin.close();
	fout.close();
	return 0;
}