| 记录编号 | 
        32697 | 
        评测结果 | 
        AAAAAEEEWW | 
    
    
        | 题目名称 | 
        607.产生01串 | 
        最终得分 | 
        50 | 
            
    
    
        | 用户昵称 | 
         Truth.Cirno | 
        是否通过 | 
        未通过 | 
    
    
        | 代码语言 | 
        C++ | 
        运行时间 | 
        3.688 s  | 
    
    
        | 提交时间 | 
        2011-11-07 19:25:05 | 
        内存使用 | 
        67.02 MiB  | 
        
    
    
    
    		显示代码纯文本
		
		#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++)
		printf("%d\n",s[inf[i][1]]-s[inf[i][0]-1]);
	fclose(stdin);
	fclose(stdout);
	return(0);
}