2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)

全场比赛题解:https://pan.baidu.com/s/1eSAMuXk

找规律

找两个节点的lca,需要能快速根据编号求出父亲的编号。

斐波那契数列:1、2、3、5、8、13、21...

第10对兔子的父节点:斐波那契数列中小于10的最大项为8,所以第10对兔子的父节点为10-8=2。

很容易理解:第5个月时,共有8对兔子(斐波那契第5项),到了第6个月时,共13对兔子。多出的5对兔子,一定是已经成熟的5对兔子(斐波那契第4项)生下的。所以对应下来:9号兔子是1号兔子生的、10号兔子是2号兔子生的...

可以先打表打出斐波那契数列,然后每次二分查找。

复杂度?打表发现斐波那契60项就已经到\(10^{12}\)了,所以树高最多60层,经计算发现能过。

Code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int m;
ll table[100]={0ll,1ll,2ll,3ll,5ll,8ll,13ll,21ll,34ll,55ll,89ll,144ll,233ll,377ll,610ll,987ll,1597ll,2584ll,4181ll,6765ll,10946ll,17711ll,28657ll,46368ll,75025ll,121393ll,196418ll,317811ll,514229ll,832040ll,1346269ll,2178309ll,3524578ll,5702887ll,9227465ll,14930352ll,24157817ll,39088169ll,63245986ll,102334155ll,165580141ll,267914296ll,433494437ll,701408733ll,1134903170ll,1836311903ll,2971215073ll,4807526976ll,7778742049ll,12586269025ll,20365011074ll,32951280099ll,53316291173ll,86267571272ll,139583862445ll,225851433717ll,365435296162ll,591286729879ll,956722026041ll,1548008755920ll,2504730781961ll};
inline ll Find(ll x){
if(x==1) return 0;
int l=0,r=60,ans=0;
while(l<=r){
int mid=(l+r)>>1;
if(table[mid]<x) ans=max(ans,mid),l=mid+1;
else r=mid-1;
}
return table[ans];
}
int main(){
scanf("%d",&m);
for(ll i=1,a,b;i<=m;++i){
scanf("%lld%lld",&a,&b);
while(a!=b){
if(a<b) swap(a,b);
a-=Find(a);
}
printf("%lld\n",a);
}
return 0;
}

最新文章

  1. bootstrap分页
  2. Python&gt;&gt;&gt;The Very First Step
  3. Sqli-LABS通关笔录-9[延时注入]
  4. linux下线程调用sleep,进程挂起
  5. Xcode学习
  6. zepto.js 处理Touch事件(实例)
  7. JavaScript之面向对象学习二(原型属性对象与in操作符)获取对象中所有属性的方法
  8. JavaEE(6) - JMS消息选择和查看
  9. UI----安健2 UIswitch UIslider
  10. zabbix入门知识
  11. 非阻塞IO模式原理
  12. (办公)TOKEN
  13. go-simplejson文档学习
  14. python之字符编码(三)
  15. Templates中的macro和include标签
  16. 数据分析融入至BI工具的新思路
  17. Kafka设计解析(十五)Kafka controller重设计
  18. Jquery实现上下移动和排序代码
  19. 大数据系列之分布式数据库HBase-0.9.8安装及增删改查实践
  20. Linux -&gt;&gt; Chmod命令改变文件/文件夹属性

热门文章

  1. 网站被攻击扫描SQL注入的日常记录
  2. hdu 1296 Polynomial Problem(多项式模拟)
  3. checkbox的全选,取消全选,获得选中值
  4. javascript中uber实现子类访问父类成员
  5. ecshop二次开发之电子票
  6. .net core/.net 使用 CommandLineParser 来标准化地解析命令行
  7. 2019-1-17-一段能让-VisualStudio-炸掉的代码
  8. HTML-DOM常用对象的用法(select/option/form/table)
  9. 在Eclipse中添加Tomcat
  10. jQuery动态加载动画spin.js