栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

Two Buttons
  • 题目描述
  • 大致题意
  • 思路
  • 代码

题目:Two Buttons
难度:*1400
标签:贪心,dfs,bfs,最短路,模拟
该篇文章使用贪心实现(python)

题目描述

大致题意

给你两个整数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)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号