博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【】minimum
阅读量:4328 次
发布时间:2019-06-06

本文共 496 字,大约阅读时间需要 1 分钟。

【链接】

【题意】

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

转载于:https://www.cnblogs.com/AWCXV/p/7626025.html

你可能感兴趣的文章
win10+mongodb安装配置
查看>>
window7修改hosts文件
查看>>
【Leetcode_easy】720. Longest Word in Dictionary
查看>>
地铁时光机第一阶段冲刺一
查看>>
Code Smell那么多,应该先改哪一个?
查看>>
站立会议02(一期)
查看>>
oracle数据库导入导出问题
查看>>
Android中的动画
查看>>
LeetCode 119 Pascal's Triangle II
查看>>
【Noip2015pj】求和
查看>>
深入理解JavaScript——闭包
查看>>
C#-WebForm-css box-shadow 给边框添加阴影效果
查看>>
objective-c 编程总结(第七篇)运行时操作 - 动态属性
查看>>
C_数据结构_链表
查看>>
kettle-连接控件
查看>>
Coursera--Neural Networks and Deep Learning Week 2
查看>>
C#中的委托和事件(续)【来自张子扬】
查看>>
机器学习部分国内牛人
查看>>
模拟Sping MVC
查看>>
Luogu 3261 [JLOI2015]城池攻占
查看>>