博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018.3.17 模拟赛——(1)无限序列
阅读量:6701 次
发布时间:2019-06-25

本文共 988 字,大约阅读时间需要 3 分钟。

题目大意:

我们按以下方式产生序列:

1、 开始时序列是: “1” ;
2、 每一次变化把序列中的 “1” 变成 “10” ,”0” 变成 “1”。
经过无限次变化,我们得到序列”1011010110110101101…”。
然后询问Q次,求a到b之间1的个数——

解题思路:

首先,观察一波 —— 序列的变化为:

1
10
101
10110
10110101
然后,我们发现Si(第i次变化)=S(i-1)+S(i-2)
就是斐波那契——
然后可以用递归的方法求出从位置1到位置X之间所有的1的个数。

源程序:

#include 
#include
#define r(i,a,b) for(int i=a;i<=b;i++)using namespace std;unsigned long long f[93],f1[93],a,b;int l,ll,n;void ycl(){ f[0]=f[1]=f1[1]=1; f1[0]=0; r(i,2,92) { f[i]=f[i-1]+f[i-2]; f1[i]=f1[i-1]+f1[i-2]; }}unsigned long long find(unsigned long long a,unsigned long long b)//递归{ if (!a) return 0; if (a==f[b]) return f1[b]; else if(a<=f1[b]) return find(a,b-1); else return f1[b-1]+find(a-f[b-1],b-2);}int main(){ ycl();//斐波那契序列 scanf("%d",&n); for (int i=1;i<=n;i++) { cin>>a>>b; //不知道为什么scanf("%llu%llu",&a,&b);不行 //所以就用cin cout<
<

转载于:https://www.cnblogs.com/Juruo-HJQ/p/9306931.html

你可能感兴趣的文章
php __FILE__,__CLASS__等魔术变量,及实例
查看>>
AaronYang WCF教程目录
查看>>
关于.net的垃圾回收和大对象处理_标记
查看>>
CentOS常用到的查看系统命令
查看>>
kafka学习总结
查看>>
第七章 数组
查看>>
***PHP 去除换行符
查看>>
Ubuntu Sudo 无法解析的主机
查看>>
Python 3.5.2 TypeError: a bytes-like object is required, not 'str’问题解决方案
查看>>
Android中SimpleAdapter的使用—自定义列表
查看>>
Java常见Jar包的用途
查看>>
P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
查看>>
MySQL同步状态双Yes的假象及seconds_behind_master的含义
查看>>
DAL调用SP时出现的异常处理
查看>>
javascript学习(11)——[设计模式]工厂模式
查看>>
BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP
查看>>
【转】Linux 下修改Tomcat使用的JVM内存大小
查看>>
xcode 开发ios兼容性问题的上下黑边 和 coco2d-x 游戏分辨率适配 ResolutionPolicy::FIXED_WIDTH 都会引起上下黑边问题!!!...
查看>>
剑指offer(一):二维数组中的查找
查看>>
编程之美-第3章 结构之法
查看>>