zoukankan      html  css  js  c++  java
  • 【】minimum

    【链接】h在这里写链接


    【题意】


    给两个数字a,b,每次操作可以把a+1a+1,或把a∗k

    问至少多少次操作可以使得a=b.

    1<=a,b<=10^18,0 <= k <= 10^18

    【题解】


    可以逆向考虑。
    现在给你一个b.
    让你把它变成a.
    如果b是k的倍数,那么肯定优先除k,这样减少的比较多。
    否则,就只能一个一个地减少了。直到变成k的倍数为止。

    【错的次数】


    0

    【反思】


    逆向考虑一下,就没那么麻烦了。

    【代码】

    #include <bits/stdc++.h>
    using namespace std;
    long long a, b, k,ans;
    int main() {
        ios::sync_with_stdio(0), cin.tie(0);
        cin >> a >> b >> k;
        for (;k > 1 && a <= b / k; ans += b%k + 1, b /= k);
        cout << ans + b - a << endl;
        return 0;
    }


  • 相关阅读:
    鼠标事件:
    各种坑记录
    Go学习笔记
    Scala学习笔记-7-代码片段
    Go学习笔记
    NIO学习笔记
    Redis常用操作
    docker & k8s 笔记
    Node常用笔记
    Maven常用笔记
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626025.html
Copyright © 2011-2022 走看看