2025A卷-流浪地球

题目描述

流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。发动机的启动方式分为“手动启动”和“关联启动”两种方式。

如果一个发动机被手动启动,下一个时刻与之相邻的两个发动机会被“关联启动”。

如果准备启动某个发动机时,它已经被启动了,则什么都不用做。

发动机0与发动机N-1是相邻。地球联合政府准备挑选某些发动机在某些时刻进行“手动启动”,最终所有的发动机都会被启动。需要找出哪些发动机最晚被启动。

输入描述

第一行两个数字N和E,中间有空格。

N代表部署发动机的总个数,E代表计划手动启动的发动机总个数。

1<N<=1000,1<=E<=1000,E<=N。

接下来共E行,每行都是两个数字T和P,中间有空格。

T代表发动机的手动启动时刻,P代表此发动机的位置编号。0<=T<=N,0<=P<=N。

输出描述

第一行一个数字N,以回车结束。

N代表最后被启动的发动机个数。

第二行N个数字,中间有空格,以回车结束。每个数字代表发动机的位置编号,从小到大排序。

用例

【用例一】
输入

8 2
0 0
1 7

输出

1
4

说明:8 个发动机,时刻 0 启动 0 号发动机,时刻 1 启动 7 号发动机。

Python代码实现

注意:为了方便调试,没有采用input()输入,直接用的给函数传参的方式,方便调试。

def main(n, e, nums: List):
    # start_time数组,存储每个发动机启动的时刻
    start_time = [1001 for _ in range(n)]   # 初始化元素为1001,方便后面求启动的 最小值 时刻
    for num in nums:
        t = num[0]
        p = num[1]
        start_time[p] = min(t, start_time[p])
    print(start_time)

    # 循环每一时刻,因为n个机器,故最多时刻n可以启动完
    for t in range(n):
        # 遍历每台机器 启动的时刻
        for i in range(n):
            if start_time[i] == t:
                # 更新相邻发动机的启动时间
                # 这里有个小技巧,因为这个机器是环状排列的,上一个元素取 (i - 1) % n, 下一个元素取 (i + 1) % n
                start_time[(i - 1) % n] = min(start_time[(i - 1) % n], t + 1)  # 每个元素要取 最小的时刻
                start_time[(i + 1) % n] = min(start_time[(i + 1) % n], t + 1)

    print(start_time)
    max_start_time = max(start_time)

    last_engines = [i for i in range(n) if start_time[i] == max_start_time]
    print(len(last_engines))
    print(" ".join(map(str,last_engines)))


if __name__ == '__main__':
    m, n = 8, 2
    nums = [[0, 0], [1, 7]]
    main(m, n, nums)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值