#斐波那契进制#洛谷 3938 斐波那契

题目


分析

可以发现兔子的这种繁衍方式就是\(f[i]=f[i-1]+f[i-2]\),
将每个数用斐波那契进制表示可以发现,
一个数的父亲就是这个数减去斐波那契前驱,直接往上跳祖先即可


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
typedef long long lll; lll fib[61];
inline lll iut(){
	rr lll ans=0; rr char c=getchar();
	while (!isdigit(c)) c=getchar();
	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
	return ans;
}
inline void print(lll ans){
	if (ans>9) print(ans/10);
	putchar(ans%10+48);
}
signed main(){
	fib[1]=fib[2]=1;
	for (rr int i=3;i<60;++i)
	    fib[i]=fib[i-1]+fib[i-2];
	for (rr int n=iut();n;--n){
		rr lll x=iut(),y=iut();
		while (x!=y){
			if (x<y) x^=y,y^=x,x^=y;
			rr int m=lower_bound(fib+1,fib+60,x)-fib;
			x-=fib[m-1];
		}
		print(x),putchar(10);
	}
	return 0;
}
上一篇:luogu P7016 [CERC2013]Captain Obvious and the Rabbit-Man


下一篇:go语言实现斐波那契数列