zoukankan      html  css  js  c++  java
  • [模拟]无限序列

    无限序列

    题目描述

    我们按以下方式产生序列:
    1、 开始时序列是: “1” ;
    2、 每一次变化把序列中的 “1” 变成 “10” ,“0” 变成 “1”。
    经过无限次变化,我们得到序列"1011010110110101101…"。
    总共有 Q 个询问,每次询问为:在区间A和B之间有多少个1。

    任务
    写一个程序回答Q个询问

    输入

    第一行为一个整数Q,后面有Q行,每行两个数用空格隔开的整数a, b。

    输出

    共Q行,每行一个回答

    输入样例
    1
    2 8

    输出样例
    4

    说明
    1 <= Q <= 5000
    1 <= a <= b < 263

    解析
    当为第一个序列时,‘1’的个数为1;当为第二个序列时,‘1’的个数为1;当为第三个序列时,‘1’的个数为2;当为第四个序列时,‘1’的个数为3;当为第五个序列时,‘1’的个数为5……
    发现没,‘1’的个数就与n(n为第几个序列)的斐波那契数列相同。而且题目是刚好只用算到斐波那契数列的第九十二项。没超出 long long 类型。

    注意事项
    要定 long long 类型,斐波那契数列算到第九十二项就可以了。

    AC完整程序

    #include<cstdio>
    #include<iostream>
    using namespace std;
    long long n,a,b,f[310],m;
    long long czadd(long long l)
    {
    	m=0;
    	while(l>0)
    	{
    		int h=1;
    		while(f[h+2]<=l) h++;
    		l-=f[h+1];
    		m+=f[h];
    	}
    	return m;
    }
    int main()
    {
    	f[1]=1;
    	f[2]=1;
    	for(int i=3;i<=92;i++) f[i]=f[i-1]+f[i-2];
    	cin>>n;
    	for(int i=1;i<=n;i++) 
    	{
    		cin>>a>>b;
    		cout<<czadd(b)-czadd(a-1)<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/luojunhang/p/12300171.html
Copyright © 2011-2022 走看看