这道题应该大家跟我在做的时候都想到了要使这两者数量最接近,所以要使较小的那个不断扩大两倍直到他们两数量最接近(不能超过),然后想到这一点后我就陷入了泥潭,一直在思考怎么确定再次倍增的条件呢,然后就。。。。卡这卡死了,后面补题的时候看了大佬的代码发现,其实根本不用想的这么复杂,当我们使他们两最接近的时候,就可以采取第一种方法,两个各减1,然后再次判断是否可以倍增,直到最后为0。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int m,n,T,ans=0;
    cin>>T;
    while(T--)
    {
        ans=0;
       cin>>m>>n;
       if(m<n) swap(m,n);//将较小的赋值给n
       while(n!=0)
       {
          while(n*2<=m)
          {
             n*=2;
             ++ans;
          }
           --m,--n,++ans;
       }
        cout<<ans<<endl;

    }


}

大家加油,祝大家天天AC(大佬勿喷)