題目鏈接
題意:
給你n個香蕉,m個蘋果。你有兩種操作
1.任選一個水果將它們翻倍。
2.同時吃掉一個香蕉和一個蘋果。
你必須同時使n和m變成0.
問如何操作才能使總操作次數最少。
思路:
bfs當然可以解決, 但是超時。
根據題意 我們要儘量構造 n == m的情況 ,如果一開始不相等,只有通過n * 2 來實現 n == m
那麼可以想到,當2 * n > m的時候,我們就得執行–操作了。因爲此時只有–操作才能促成n == m
的形式。
根據思路模擬即可。
#include<bits/stdc++.h>
using namespace std;
long long a[1000005], v[1000005];
int main()
{
int t;
cin >> t;
while(t--)
{
int n, m;
cin >> n >> m;int cnt = 0;
if(n > m)swap(n, m);
while(n)
{
while(n * 2 <= m)
{
cnt++;
n *= 2;
}
cnt++;
n--;
m--;
}
cout << cnt << endl;
}
return 0;
}