题意:
分析:
当 (n=m) 时,显然只能通过不断的吃水果来达到目标,因此使两种水果的数量相等就是我们的目的。
令 (n<m),
注意到 (ngeq lceilfrac{m}{2}
ceil) 且 (n<m) 时,可以同时减小两个的值来使得 (n) 的值等于二者的差值,这样只要再对 (n) 进行 (*2) 的操作,二者即可相等。
当 (n<lceilfrac{m}{2}
ceil) 时,可以通过对 (n) 进行 (*2) 来达到第一个条件。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
if(n>m)
swap(n,m);
int cnt=0;
while(n!=m)
{
if(n>=(m+1)/2&&n<m)
{
int d=m-n;
cnt+=(n-d);
cnt++;
n=2*d;
m=2*d;
}
else
{
n*=2;
cnt++;
}
}
cnt+=n;
printf("%d
",cnt);
}
return 0;
}
也可以直接计算出结果:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
if(n>m)
swap(n,m);
int cnt=m+1;
int d=(log(1.0*m/n)/log(2.0));
if(m!=2*n)
cnt+=d;
printf("%d
",cnt);
}
return 0;
}