題目連結: https://tioj.ck.tp.edu.tw/problems/1011

# 內容

對於字串來說,Edit Distance 是一個著名的 DP 問題。現在我們把這個問題弄得簡單一點,例如:把字串換成數字。對於一個數字,我們想要藉由某些操作換成數字。而對於整數的一個合法的操作包括以下三種情形:
乘以 2 加 1,即K=2K+1K = 2K+1
乘以 2 ,即 K=2KK = 2K
除以 2,即 K=[K/2]K = [K/2]
給定整數 A 和 B ,請你求出最小的操作次數 N 使得從 A 開始操作 N 次可以換成 B。

# 思路

其實超簡單,把他想成二分樹吧。你會發現其最小轉換就是最小共同祖先

# 程式碼

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    ll a,b,ans = 0;
    cin>>a>>b;
    while(a!=b){
        if(a>b)a>>1;
        else b>>1;
        ++ans;
    }
    cout<<ans<<endl;
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay