洛谷mNOIP模拟赛d1t1 斐波那契(90分)
来源:互联网 发布:淘宝购物车怎么扩容 编辑:程序博客网 时间:2024/05/20 01:10
https://www.luogu.org/contestnew/show/4300
题目背景
大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg
题目描述
小 C 养了一些很可爱的兔子。 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行 繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子。我们假定, 在整个过程中兔子不会出现任何意外。
小 C 把兔子按出生顺序,把兔子们从 1 开始标号,并且小 C 的兔子都是 1 号兔子和 1 号兔子的后代。如果某两对兔子是同时出生的,那么小 C 会将父母标号更小的一对优先标 号。
如果我们把这种关系用图画下来,前六个月大概就是这样的:
其中,一个箭头 A → B 表示 A 是 B 的祖先,相同的颜色表示同一个月出生的兔子。
为了更细致地了解兔子们是如何繁衍的,小 C 找来了一些兔子,并且向你提出了 m 个 问题:她想知道关于每两对兔子 a_ia
i
和 b_ib
i
,他们的最近公共祖先是谁。你能帮帮小 C 吗?
一对兔子的祖先是这对兔子以及他们父母(如果有的话)的祖先,而最近公共祖先是指 两对兔子所共有的祖先中,离他们的距离之和最近的一对兔子。比如,5 和 7 的最近公共祖 先是 2,1 和 2 的最近公共祖先是 1,6 和 6 的最近公共祖先是 6。
输入输出格式
输入格式:
从标准输入读入数据。 输入第一行,包含一个正整数 m。 输入接下来 m 行,每行包含 2 个正整数,表示 a_ia
i
和 b_ib
i
。
输出格式:
输出到标准输出中。 输入一共 m 行,每行一个正整数,依次表示你对问题的答案。
输入输出样例
输入样例#1: 复制
5
1 1
2 3
5 7
7 13
4 12
输出样例#1: 复制
1
1
2
2
4
说明
【数据范围与约定】 子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试只解 决一部分测试数据。 每个测试点的数据规模及特点如下表:
特殊性质 1:保证 a_ia
i
, b_ib
i
均为某一个月出生的兔子中标号最大的一对兔子。例如,对 于前六个月,标号最大的兔子分别是 1, 2, 3, 5, 8, 13。
特殊性质 2:保证 |a_i-b_i|\le 1∣a
i
−b
i
∣≤1。
既然是寻找LCA,我们可以从父节点与子节点的关系入手
可以发现他们的差有规律
如:寻找5的父亲
5的父亲2 与5差3 恰好是斐波那契数列中最大的不大于5的一项
可以发现每一个都具有这个规律
而数据范围10^12
小于斐波那契数列第60项
所以我们只要预处理60项的斐波那契 套规律用二分查找即可
代码如下
#include<bits/stdc++.h>#define ll long longusing namespace std;ll f[61];ll m;void work(ll &a,ll &b,ll &t1,ll &t2){ while(a!=b){ if(a>b) {a-=f[t1-1];t1=lower_bound(f,f+t1,a)-f;} else{b-=f[t2-1];t2=lower_bound(f,f+t2,b)-f;} }}int main(){ scanf("%lld",&m); f[0]=0; f[0]=f[1]=1; for(int i=2;i<=60;i++) f[i]=f[i-1]+f[i-2]; ll a,b,t1,t2; while(m--) { scanf("%lld %lld",&a,&b); t1=lower_bound(f,f+60,a)-f;//t1-1即为最大的不大于他的一项 t2=lower_bound(f,f+60,b)-f; work(a,b,t1,t2); printf("%lld\n",a); } return 0;}
可以说是唯一会做的题了
- 洛谷mNOIP模拟赛d1t1 斐波那契(90分)
- 洛谷 mNOIP 模拟赛 Day 1
- 洛谷mNOIP day2t1 60分
- mNOIP 模拟赛 Day 2
- mNOIP 模拟赛 day1 T2 数颜色
- 洛谷模拟赛 mNOIP DAY1
- NOI 2016 D1T1 优秀的拆分(80分)
- BJ模拟(1) D1T1 Delight for a Cat
- [NOIP2017模拟][洛谷3938]斐波那契
- 【NOIP2012模拟11.8】斐波那契
- BJ模拟(1) D1T1 计数
- NOJ1113 斐波那契数应用 模拟
- 【模拟】XMU 1599 斐波那契汤
- 斐波那契数的栈模拟递归算法
- 用vb模拟斐波那契钟效果
- 洛谷 3938 [NOIP模拟] 斐波那契 二分+找规律
- NOIP模拟赛 斐波那契树 + 二分 + 并查集
- 九度OJ 1075 斐波那契数列 (模拟,递归)
- 预编译头的作用
- Tensorflow学习与应用二
- HTTPClient和HttpURLConnection实例对比
- FPGA作业3:通过例化设计18进制计数器
- 调整数组使奇数全部都位于偶数前面。
- 洛谷mNOIP模拟赛d1t1 斐波那契(90分)
- 我人生中第一篇blog
- 近况整理
- SGU 507 Treediff 启发式合并
- Appium移动 自动化测试-环境搭建(1)
- 让Spring架构减化事务配置
- (HDOJ)Children's Queue(java大数大法好)
- 二十、继承
- Redis个人总结及代码实现