题目:
https://www.luogu.org/problemnew/show/P3938
找规律;
son : 1 2 3 4 5 6 7 8 9 10
fa t : 1 1 2 1 2 3 1 2 3 4
手写二分比STL慢QAQ;
CODE
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long ll;
ll f[101],sum[101];
ll find(ll x)
{
ll l=1,r=61;
while(r - l > 1)
{
ll mid= l + r >>1;
if(f[mid] >= x) r=mid;
else l=mid;
}
return x-f[l];
}
void solve()
{
int m;
scanf("%lld",&m);
f[0]=f[1]=1;
for(int i=2;i<=61;i++) f[i]=f[i-1]+f[i-2];
for(int i=1;i<=m;i++)
{
ll x,y;
scanf("%lld%lld",&x,&y);
while(1)
{
if(x>y)
{
x=find(x);
if(x==y) break;
}
else if(x==y) break;
else y=find(y);
}
printf("%lld\n",x);
}
return;
}
int main()
{
solve();
return 0;
}