牛客練習賽61 吃水果 思維

題目鏈接

題意:

給你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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章