Problem
Solution
首先a或者b等于target的时候,肯定是不需要操作的,直接输出0.
接下来,如果target为奇数,是无论如何都达不到target的,因为只要进行一次操作,a和b必定为偶数,所以输出-1.
当a+b等于target的时候,只需要一次操作,大于的时候需要两次,所以就看多少次操作能让a+b>=target。
Code
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
int main()
{
int t;
cin >> t;
while (t--)
{
ll a, b, target;
cin >> a >> b >> target;
if (a == target || b == target) cout << 0 << endl;
else if (target % 2 != 0) cout << -1 << endl;
else
{
int res = 0;
while( a != target && b != target)
{
res ++;
if( 2 *(a + b) < target)
{
a *= 2;
b *= 2;
}
else
{
break;
}
}
cout << res << endl;
}
}
return 0;
}