AOJ877(斐波那契模型)
来源:互联网 发布:sql case when怎么用 编辑:程序博客网 时间:2024/05/17 00:56
点击打开链接
无限序列
Description
我们按以下方式产生序列:
1、 开始时序列是: "1" ;
2、 每一次变化把序列中的 "1" 变成 "10" ,"0" 变成 "1"。
经过无限次变化,我们得到序列"1011010110110101101..."。
总共有 Q 个询问,每次询问为:在区间A和B之间有多少个1。
任务 写一个程序回答Q个询问
1、 开始时序列是: "1" ;
2、 每一次变化把序列中的 "1" 变成 "10" ,"0" 变成 "1"。
经过无限次变化,我们得到序列"1011010110110101101..."。
总共有 Q 个询问,每次询问为:在区间A和B之间有多少个1。
任务 写一个程序回答Q个询问
Input
第一行为一个整数Q,后面有Q行,每行两个数用空格隔开的整数a, b。
Output
共Q行,每行一个回答
Sample Input
12 8
Sample Output
4
Hint
约定
1 <= Q <= 5000
1 <= a <= b < 2^63
思路1 <= Q <= 5000
1 <= a <= b < 2^63
观察可得,序列的长度服从斐波那契数列,具有如下规律:
1.一个序列中1的数量等于上一个序列的长度
2.下一个序列的前部分和上一个序列是相同的,后面部分是由上一序列逐个构成直到达到斐波那契数为止
代码示例
#include<bits/stdc++.h>using namespace std; long long fib[110];long long ans; long long fun(long long a){ if(a==0) return 0; if(a==1) return 1; if(a==2) return 1; if(a==3) return 2; int loc; for(int i=1;i<=100;++i){//定位 if(a>fib[i-1]&&a<=fib[i]){ loc=i; break; } } return (fib[loc-2]+fun(a-fib[loc-1])); } int main(){ std::ios::sync_with_stdio(false); fib[0]=0; fib[1]=1; for(int i=2;i<=110;++i){ fib[i]=fib[i-1]+fib[i-2]; } int T; long long a,b; cin>>T; while(T--) { cin>>a>>b; long long c=fun(a-1); long long d=fun(b); cout<<d-c<<endl; } return 0;}
阅读全文
1 0
- AOJ877(斐波那契模型)
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- 【斐波那契】
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- 斐波那契
- H5 32
- CDN
- Kotlin语法(七)
- h5 33
- (117)BitMask蓝图变量
- AOJ877(斐波那契模型)
- php判断请求类型(ajax|get|post|cli)
- 用vc2013编写的程序在新电脑上运行出现“0xc000007b”错误的解决办法
- Python学习之列表的内部实现详解
- h5 34
- 基于React Native的移动平台研发实践分享
- 项目实战:微交互之转场动画(anim、style、theme)
- 简单二叉树实现
- linux 连接手机失败