蓝桥杯 算法提高 ADV-1169 区间覆盖问题 python AC

devtools/2024/9/24 8:43:12/

关键字:贪心

先对输入内容处理,只保存每个起点最长的那个终点,一步步替换当前位置为最长的那个终点,考虑到可能会有重叠(如1-4, 3-5),当找不到当前终点时,把当前位置-1继续找终点

第一版👇

python">n, m = map(int, input().split())
d = {}
for _ in range(m):a, b = map(int, input().split())if a != b:if a not in d:d[a] = belif a in d and d[a] < b:d[a] = b
now = 1
step = 0
vis = []
while now != n:if now in vis:step = -1breakstep += 1vis.append(now)while now not in d:now -= 1vis.append(now)now = d[now]
print(step)

有答案错误,看了测试点和关键字发现问题了,但是给了好多分。。

贪心做法:从起点开始保存每一步能够到达的最远位置,然后遍历起点到最远位置(即遍历上一步能够到达的所有位置),如果下一步能够到达更远的位置,更新最远位置。如果能够到达的最远位置小于当前位置(后来发现是多余的,因为无法小于)时跳出并返回-1。提交发现死循环:当能够到达的最远位置和当前位置重叠时无法结束(如只给1-4但要到5就会在4一直循环)。加入一个列表保存所有当前到达的位置,如果能够到达的最远位置已访问过也跳出并返回-1。

第二版👇

python">n, m = map(int, input().split())
d = {}
for _ in range(m):a, b = map(int, input().split())if a != b:if a not in d:d[a] = belif a in d and d[a] < b:d[a] = b
now, next, step, max_ind = 1, 0, 0, 1
vis = []
while max_ind < n:if max_ind < now or max_ind in vis:step = -1breakvis.append(now)step += 1next = max_indfor i in range(now, max_ind + 1):if i in d and d[i] > max_ind:max_ind = d[i]now = next
print(step)

过了,但是代码看着自己都难受,很冗余的感觉。。

优化一下,优化过程中发现当前无法比能到达的最远距离更小,所以只要判断二者不相等就可以了,但是初始时它们都为1怎么办。。欸发现好像初始时当前位置不太重要,只用来为遍历时提供范围就行了,于是把当前位置设为0,能够达到的最远距离设为1,做完这些发现保存已访问过位置也是多余的。。

最终版👇

python">n, m = map(int, input().split())
d = {}
for _ in range(m):a, b = map(int, input().split())if a != b:if a not in d:d[a] = belif a in d and d[a] < b:d[a] = b
now, next, max_ind, step = 0, 1, 1, 0
while max_ind < n:if max_ind == now:step = -1breakstep += 1next = max_indfor i in range(now, next + 1):if i in d and d[i] > max_ind:max_ind = d[i]now = next
print(step)


http://www.ppmy.cn/devtools/39942.html

相关文章

设计模式——策略模式(Strategy)

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许在运行时动态地改变一个对象的行为。策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化…

最新巨量X-Bogus、_signature参数逆向分析与算法还原

文章目录 1. 写在前面2. 接口分析3. 断点分析4. 扣代码补环境5. 数据解密 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路…

力扣/leetcode383.比特位记数

题目描述 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 代码思路 第一种方法 最简单的方法就是&#xff0c;遍历然后使用python自带的bin()方法直接…

DDoS攻防,本质上是成本博弈!

在互联网里&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击作为一种常见的网络威胁&#xff0c;持续对网站、在线服务和企业基础设施构成严重挑战。本文旨在探讨实施DDoS攻击的大致成本、以及企业如何采取有效措施来防范此类攻击&#xff0c;确保业务连续性和网络…

AI学习指南概率论篇-贝叶斯推断

AI学习指南概率论篇-贝叶斯推断 概述 在人工智能中&#xff0c;贝叶斯推断是一种基于贝叶斯统计理论的推理方法。它通过使用概率论的知识&#xff0c;结合先验信息和观测数据&#xff0c;来更新对未知变量的推断。贝叶斯推断提供了一种合理的方法来处理不确定性&#xff0c;并…

https://是怎么实现的?

默认的网站建设好后都是http访问模式&#xff0c;这种模式对于纯内容类型的网站来说&#xff0c;没有什么问题&#xff0c;但如果受到中间网络劫持会让网站轻易的跳转钓鱼网站&#xff0c;为避免这种情况下发生&#xff0c;所以传统的网站改为https协议&#xff0c;这种协议自己…

地下工程中测斜仪的关键应用

地下工程&#xff0c;如隧道、地铁和基坑等项目的建设&#xff0c;对于现代城市的发展至关重要。然而&#xff0c;这些工程的实施往往伴随着诸多风险&#xff0c;特别是与周围土体的稳定性有关的风险。为了确保工程的安全进行&#xff0c;实时监测技术变得尤为关键。其中&#…

清理缓存简单功能实现

在程序开发中&#xff0c;经常会用到缓存&#xff0c;最常用的后端缓存技术有Redis、MongoDB、Memcache等。 而有时候我们希望能够手动清理缓存&#xff0c;点一下按钮就把当前Redis的缓存和前端缓存都清空。 功能非常简单&#xff0c;创建一个控制器类CacheController&#xf…