OD E卷 - 实现【流浪地球】

文章目录

题目

在赤道上均匀部署N个转向发动机,编号为0 ~ N - 1:

  • 默认 为未启动状态,启动方式为手动启动、关联启动;
  • 如果在时刻1一个发动机被启动,在时刻2 与之相邻的两个发动机就会被关联启动;
  • 若准备启动某个发动机时,它已经启动,则什么都不用做;
  • 发动机0与N-1是相邻的;

输入描述:

第一行输入N E, N为发动机总数,E表示手动启动的发动机总个数;

N, E 在【1, 1000】之间,E<=N;

后续E行,每行输入 T P,分别表示手动启动的时刻,启动发动机编号;

T,P均在【0,N】之间;

输出描述:

第一行为一个数字N,表示最后被启动的发动机个数;

第二行为N个发送机的编号,从小到大排序,以空格分隔;

示例1:

输入:

8 2

0 2

0 6

输出:

2

0 4

示例2:

输入:

8 2

0 1

1 7

输出:

2

4 5

解题代码

python 复制代码
# 第一行输入N E
nums = [int(x) for x in input().split(" ")]
# 总发动机数
count = nums[0]
# 数组保存所有的节点,数组值,代表对应位置启动时间
engines = [-1 for i in range(count)]  # -1表示未激活

# 手动启动个数
start_cnt = nums[1]
min_time = float("inf")
for i in range(start_cnt):  # 行数
    nums1 = [int(x) for x in input().split(" ")]
    # 更新对应发动机的启动时间
    engines[nums1[1]] = nums1[0]
    # 当前时刻
    min_time = min(min_time, nums1[0])


def activate(index, time, count):
    # index当前已经启动的位置编号
    # time为当前时刻
    # count 为发动机总数
    global engines
    # 更新当前位置左右的节点
    left = index - 1
    if index == 0:
        left = count - 1
    right = index + 1
    if index == count - 1:
        right = 0

    # 激活
    if engines[left] == -1:
        engines[left] = time
    if engines[right] == -1:
        engines[right] = time


def find(start):  # start 为起始时间 0
    global engines
    flag = True
    while flag:
        for i in range(len(engines)):
            if engines[i] == start:  # 从开始位置向两边激活
                activate(i, start + 1, len(engines))

        start += 1
        active_cnt = 0  # 已激活的数量
        for i in range(len(engines)):
            if engines[i] != -1:
                active_cnt += 1

        # 全部激活,则停止
        if active_cnt == len(engines):
            flag = False

    # 最后激活的时间节点
    max_time = engines[0]
    for i in range(len(engines)):
        if engines[i] > max_time:
            max_time = engines[i]

    count = 0
    result = ""
    for i in range(len(engines)):
        if max_time == engines[i]:
            result += str(i) + " "
            count += 1

    # 输出最后激活的总数 及编号
    print(count)
    print(result[:-1])

find(min_time)
相关推荐
好家伙VCC41 分钟前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
zhousenshan1 小时前
Python爬虫常用框架
开发语言·爬虫·python
IMER SIMPLE1 小时前
人工智能-python-深度学习-经典神经网络AlexNet
人工智能·python·深度学习
CodeCraft Studio1 小时前
国产化Word处理组件Spire.DOC教程:使用 Python 将 Markdown 转换为 HTML 的详细教程
python·html·word·markdown·国产化·spire.doc·文档格式转换
专注API从业者2 小时前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
java1234_小锋2 小时前
[免费]基于Python的协同过滤电影推荐系统(Django+Vue+sqlite+爬虫)【论文+源码+SQL脚本】
python·django·电影推荐系统·协同过滤
liulilittle2 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
看海天一色听风起雨落3 小时前
Python学习之装饰器
开发语言·python·学习
XiaoMu_0013 小时前
基于Python+Streamlit的旅游数据分析与预测系统:从数据可视化到机器学习预测的完整实现
python·信息可视化·旅游
THMAIL3 小时前
深度学习从入门到精通 - 生成对抗网络(GAN)实战:创造逼真图像的魔法艺术
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·cnn