https://ac.nowcoder.com/acm/contest/5026/B
思路:我们假设 n > m n>m n>m,很明显答案受限于较大的那个数,根据贪心原则,此时让 m m m一直翻倍肯定比以后翻倍要赚。所以直接对 m m m进行翻倍操作,只要满足: m < = n & & 2 ∗ m > n m<=n\&\&2*m>n m<=n&&2∗m>n。如果此时 m = n m=n m=n,可直接得到答案,否则我们假设 x x x天后有: 2 ∗ ( m − x ) = n − x 2*(m-x)=n-x 2∗(m−x)=n−x,可得: x = 2 ∗ m − n x=2*m-n x=2∗m−n,由 m m m和 n n n的关系我们可知 x < m x<m x<m,所以一定有解。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int main()
{
int t,n,m,ans;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%d%d",&n,&m);
if(n<m)
swap(n,m);
while((m<<1)<=n)
++ans,m<<=1;
if(m==n)
printf("%d\n",ans+m);
else
printf("%d\n",ans+1+n);
}
return 0;
}