【题意】


给两个数字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;
}


相关文章:

  • 2021-12-21
  • 2021-08-19
  • 2022-02-24
  • 2021-08-06
  • 2021-10-19
  • 2021-07-26
猜你喜欢
  • 2021-06-13
  • 2021-07-23
  • 2021-12-17
  • 2021-03-31
  • 2021-11-18
  • 2022-02-21
  • 2021-09-17
相关资源
相似解决方案