针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。
有兴趣的同学可以扫码添加我们的微信(code5bug)了解,免费试课一下。
流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N。
1). 初始状态下所有的发动机都是未启动状态;
2). 发动机启动的方式分为”手动启动”和”关联启动”两种方式;
3). 如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被"关联启动”;
4). 如果准备启动某个发动机时,它已经被启动了,则什么都不用做;
5). 发动机0与发动机N-1是相邻的;
地球联合政府准备挑选某些发动机在某些时刻进行"手动启动”。当然最终所有的发动机都会被启动。
哪些发动机最晚被启动呢?
第一行两个数字N和E,中间有空格N代表部署发动机的总个数,E代表计划手动启动的发动机总个数 1 接下来共E行,每行都是两个数字T和P,中间有空格T代表发动机的手动启动时刻,P代表此发动机的位置编号。0 <= T <= N 0 <= P < N 第一行一个数字N,以回车结束N代表最后被启动的发动机个数 第二行N个数字,中间有空格,以回车结束每个数字代表发动机的位置编号,从小到大排序 这个题目属于 广度优先搜索(BFS) 类型的算法题。 整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。输出描述
示例1
输入:
8 2
0 2
0 6
输出:
2
0 4
说明:
8个发动机;
时刻0启动(2,6);
时刻1启动(1,3,5,7)(其中1,3被2关联启动,5,7被6关联启动)
时刻2启动(0,4)(其中0被1,7关联启动,4被3,5关联启动);
至此所有发动机都被启动,最后被启动的有2个,分别是0和4。
C++
#include
题解
1. 题目类型
2. 解题思路
N
个发动机,并且每个发动机都有一个启动时刻。启动时,发动机会触发相邻发动机的“关联启动”。因此,我们的任务是模拟发动机的启动过程,找到所有发动机启动的最后时刻,并且输出最后被启动的发动机。3. 代码大致描述
N
和 E
,分别代表发动机的总数和手动启动的发动机数量。接着读取每一个手动启动事件,包括启动的时刻和发动机的位置。(启动时刻, 发动机位置)
的二元组,通过时刻从小到大的顺序处理启动。
unordered_set
来记录已启动的发动机,避免重复启动。