样例过了,数据点下了两个都没问题,看了半天也没看出哪能爆RE
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a,b;
ll f[100]={0,1,1};
ll check(ll x,ll l,ll r){
ll mid=(l+r)/2;
if(f[mid]<x&&f[mid+1]>=x) return f[mid];
else if(f[mid]<x) check(x,mid+1,r);
else if(f[mid]>=x) check(x,l,mid-1);
}
int main() {
for (int i=3;i<=60;i++){
f[i]=f[i-1]+f[i-2];
}
cin>>n;
for(int i=1;i<=n;i++){
cin>>a>>b;
if(a==b){
cout<<a<<endl;
continue;
}
while(1){
if(a>b){
a-=check(a,1,60);
}
else{
b-=check(b,1,60);
}
if(a==b){
cout<<a<<endl;
break;
}
}
}
return 0;
}