0
点赞
收藏
分享

微信扫一扫

蓝桥杯国赛冲刺 -- cf刷题记录 -- 520B. Two Buttons贪心

booksmg2014 2022-04-29 阅读 24

Two Buttons

题目描述

在这里插入图片描述

大致题意

给你两个整数n,m,每次可以在两次操作中选择一个操作:

  1. 将 n 乘以 2
  2. 将 n 减去 1

问最少需要多少次操作可以使得 n == m

思路

乍一看最小操作次数,首选方法bfs,但是该题数据量过大,不适宜用bfs。

可以尝试考虑贪心的思路。

可以看出可选择的操作没有除,所以如果 n 比 m 大只能 一直减一。
选哪种操作最划算呢?
看样子得多用乘法比较划算,我问当然希望能一路乘到结果,但是这样的话n得是m的二分之一,四分之一,八分之一…
但是我们不好权衡是乘了之后再减还是减了之后再乘。

不妨逆向思考一下,我们用m得到n,每次m除以二或者是加一,这样一来我们就能一直除,直到m不大于n为止。
如果m为奇数,加一,否则除以二

代码

a, b = list(map(int, input().split(" ")))

ans = 0
while a < b:
    if b % 2 == 1:
        b += 1
        ans += 1
    b //= 2
    ans += 1
ans += a - b
print(ans)
举报

相关推荐

0 条评论