Luogu P3938 斐波那契

第一眼看到这题,想到的是LCA,于是开始想怎么建树,倒是想出了\(n^{2}\)算法,看了下数据范围,果断放弃

想了想这数据范围,大的有点不正常,这让我想起了当年被小凯支配的恐惧QAQ

看了大约\(\mathcal{10min}\)后找出规律:根节点减去一个最接近它的小于等于它的Fibonacci数列中的数,就是它的父亲节点

然后就很简单了,先把Fibonacci打表,然后二分查找(\(\mathfrak{STL}\)大法好)

最后注意一点:不要忘了开\(\tt{long long}\)

夸赞一句:这个题思路真奇妙

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll f[1000010],tot;
ll read(){
    ll k=0; char c=getchar();
    for(;c<'0'||c>'9';) c=getchar();
    for(;c>='0'&&c<='9';c=getchar())
      k=(k<<3)+(k<<1)+c-48;
    return k;
}
int main(){
    f[0]=f[1]=1;
    for(int i=2;f[i-1]<=1e12;i++){
        f[i]=f[i-1]+f[i-2];
        tot++;
    }
    int m=read();
    while(m--){
        ll x=read(),y=read();
        if(x==y){
            printf("%lld\n",x);  continue;
        }
        while(x!=y){
            if(x<y) swap(x,y);
            int pos=lower_bound(f+1,f+tot+1,x)-f-1;
            x-=f[pos];
        }
        if(x) printf("%lld\n",x);
        else printf("1");
    }
    return 0;
}

最新文章

  1. Python之路第一课Day1--随堂笔记
  2. JavaScript系列:正则表达式
  3. Spring Assert(方法入参检测工具类-断言)
  4. Android Editext监听光标位置
  5. android中广播接收SD卡状态
  6. FJ省队集训DAY4 T1
  7. LRU Cache的简单c++实现
  8. Python之旅_计算机基础入门
  9. JWT实现用户权限认证
  10. MyBatis返回map数据
  11. JavaApi
  12. Oracle数据库:ORA-54013错误解决办法
  13. Where are your from!!!!!!!!!!!! !Baby! {封装}
  14. gitlab导入现在git项目
  15. offsetWidth与clientWidth 区别
  16. 前端框架VUE----babel
  17. MFC框架仿真&lt;三&gt;R T T I
  18. Java基础面试题(Hibernate)
  19. 分布式ID生成器PHP+Swoole实现(下) - 代码实现
  20. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra

热门文章

  1. 集中化管理平台 — Ansible 详解
  2. vant搜索框问题
  3. [SDOI2019] 热闹又尴尬的聚会
  4. pgsql如何重启
  5. Vuex目录结构推荐
  6. 转 载python数据分析(1)-numpy产生随机数
  7. Metasploits之Adobe阅读器漏洞
  8. centOS+uwsgi+nginx 部署flask项目,问题记录
  9. ZOJ Saddle Point 数学思维题
  10. No bean named &#39;springSecurityFilterChain&#39; is defined