| 比赛 | 
    20111107 | 
    评测结果 | 
    WWWWWEEEWW | 
    | 题目名称 | 
    产生01串 | 
    最终得分 | 
    0 | 
    | 用户昵称 | 
    Truth.Cirno | 
    运行时间 | 
    0.000 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    0.00 MiB  | 
    | 提交时间 | 
    2011-11-07 10:56:38 | 
显示代码纯文本
#include <cstdio>
using namespace std;
struct boolean
{
	bool b[10000000];
};
boolean a={0},b={0},c={0};
int la,lb,lc,s[10000000]={0};
int main(void)
{
	freopen("infinit.in","r",stdin);
	freopen("infinit.out","w",stdout);
	int i,q,inf[5000][2],maxnum=0;
	scanf("%d\n",&q);
	for (i=0;i<q;i++)
	{
		scanf("%d %d\n",&inf[i][0],&inf[i][1]);
		if (inf[i][1]>maxnum)
			maxnum=inf[i][1];
	}
	la=1;
	lb=2;
	lc=3;
	a.b[1]=1;
	b.b[1]=1;
	b.b[2]=0;
	c.b[1]=1;
	c.b[2]=0;
	c.b[3]=1;
	while (lc<maxnum)
	{
		la=lb;
		lb=lc;
		lc=la+lb;
		a=b;
		b=c;
		for (i=1;i<=la;i++)
			c.b[lb+i]=a.b[i];
		
	}
	for (i=1;i<=maxnum;i++)
		s[i]=s[i-1]+c.b[i];
	for (i=0;i<q;i++)
	{
		if (inf[i][1]!=inf[i][0])
			printf("%d\n",s[inf[i][1]]-s[inf[i][0]]);
		else
			printf("%d\n",int(c.b[inf[i][1]]));
	}
	fclose(stdin);
	fclose(stdout);
	return(0);
}