题解

这是一道推规律的题。

首先,这道题送分不少,先考虑 \(70pts\),直接暴力 \(\mathcal O(n)\) 建边,\(\mathcal O(logn)\) 求 \(lca\)

其次对于 \(|a_i-b_i|\leq 1\) 的情况,直接输出 \(1\),原因显然。

那么正解是 \(fibonacci\),我们设 \(f_i\) 表示第 \(i\) 个月的兔子数量,那么我们根据题意,发现转移为 \(f_i=f_{i-1}+f_{i-2}\),因为只有出生两个月的兔子能生。

那么对于一个第 \(i\) 月出生的兔子,其编号为 \(id_i=f_{i-1}+j\),\(j\) 为其父亲编号,那么我们就可以根据此来求父亲。

这就是一个完美的 \(fibonacci\)。所以我们可以预处理出 \(fibonacci\),然后二分,再根据求 \(lca\) 的思想跳,因为树高很小,所以我们可以视为常数。

复杂度 \(\mathcal O(mlogn)\)

Code:
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
#define int long long
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
inline int read() {
register int x=0,f=1;char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
return x*f;
}
}
using IO::read;
namespace nanfeng{
#define cmax(x,y) ((x)>(y)?(x):(y))
#define cmin(x,y) ((x)>(y)?(y):(x))
#define FI FILE *IN
#define FO FILE *OUT
static const int N=63;
int f[N],m;
int lca(int a,int b) {
int da=lower_bound(f,f+61,a)-f,db=lower_bound(f,f+61,b)-f;
if (da>db) swap(da,db),swap(a,b);
while(a!=b) {
b=b-f[lower_bound(f,f+61,b)-f-1];
db=lower_bound(f,f+61,b)-f;
if (da>db) swap(da,db),swap(a,b);
}
return a;
}
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
f[0]=f[1]=1;
for (ri i(2);i<=62;p(i)) f[i]=f[i-1]+f[i-2];
f[0]=0;//为了防止二分时边界溢出,f[0]处理为0
m=read();
for (ri i(1);i<=m;p(i)) {
int a=read(),b=read();
printf("%lld\n",lca(a,b));
}
return 0;
}
#undef int
}
int main() {return nanfeng::main();}

最新文章

  1. cache4j轻量级java内存缓存框架,实现FIFO、LRU、TwoQueues缓存模型
  2. Nginx+php+fastcgi在win7下的配置
  3. c#中高效的excel导入sqlserver的方法
  4. loadrunner怎么将变量保存到参数中
  5. 解决一道leetcode算法题的曲折过程及引发的思考
  6. MTNET 自用ios网络库开源
  7. [资料]pthreads PHP
  8. 搭个 Web 服务器(一)
  9. PHP中的替代语法
  10. 多组 RadioButtonList 获取值
  11. java11 Guava:谷歌开发的集合库
  12. docker iptables 端口映射 nat
  13. Qt调用VC++生成的动态链接库
  14. js区分移动设备与PC
  15. [HMLY]11.iOS函数式编程的实现&amp;&amp;响应式编程概念
  16. FastDFS + Nginx 安装
  17. 用DriverStudio开发USB驱动程序
  18. Mycat 分片规则详解--ASCII 取模范围分片
  19. vue 特点
  20. 在android studio写car的app代码时遇到的问题

热门文章

  1. Apache Superset 1.2.0教程 (三)—— 图表功能详解
  2. C语言:位运算符
  3. 详解Window10下使用IDEA搭建Hadoop开发环境
  4. 手写系列-实现一个铂金段位的 React
  5. React组件三大属性之 refs
  6. P5296 [北京省选集训2019]生成树计数
  7. 将base64Url对应图片保存到本地
  8. java中的集合类学习(三)
  9. (opencv5)轮廓检测函数
  10. videojs文档翻译-EventTarget