流浪地球发动机

news/2024/9/19 18:37:53/ 标签: python

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码来自此处

python">if __name__ == '__main__':# 发动机的总个数, 计划手动启动的发动机总个数n, e = map(int, input().split())# 记录每个发动机的最终启动时刻, 初始化为极大值,方便后面取最早启动时刻launches = [1001] * nfor _ in range(e):# 发动机的手动启动时刻, 发动机的位置编号t, p = map(int, input().split())# p号发动机在t时刻手动启动launches[p] = t# 从编号 i 的发动机手动启动后, 关联启动到编号 jfor i in range(n):for j in range(n):# 内关联距离innerDis = abs(i - j)# 外关联距离outerDis = n - innerDis# 最短关联距离minDis = min(innerDis, outerDis)launches[j] = min(launches[j], launches[i] + minDis)maxT = 0  # 最晚启动时刻last = []  # 最晚启动的发动机编号集合for p in range(n):t = launches[p]  # 当前发动机启动时刻if t < maxT:  # 不是最晚启动的发动机continue# 更晚启动的时刻if t > maxT:maxT = tlast.clear()last.append(p)  # 记录该发动机编号last.sort()print(len(last))print(" ".join(map(str, last)))

感谢你的指正!让我们重新分析代码的执行流程,以确保我们正确理解最后被启动的发动机。

输入解析

  • 输入为 8 20 2 0 6
  • n = 8:表示有 8 个发动机,编号从 0 到 7。
  • e = 2:表示有 2 个手动启动的命令。
  • 接下来的输入是:
    • 0 2:表示在时刻 0 启动发动机 2。
    • 0 6:表示在时刻 0 启动发动机 6。

代码执行流程

  1. 初始化

    python">launches = [1001] * n
    
    • 创建一个列表 launches,长度为 8,初始值为 1001,表示所有发动机的启动时刻都未被启动。
    launches = [1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001]
    
  2. 记录手动启动

    python">for _ in range(e):t, p = map(int, input().split())launches[p] = t
    
    • 第一次循环(_ = 0):
      • 输入 0 2,将发动机 2 的启动时刻更新为 0。
      launches = [1001, 1001, 0, 1001, 1001, 1001, 1001, 1001]
      
    • 第二次循环(_ = 1):
      • 输入 0 6,将发动机 6 的启动时刻更新为 0。
      launches = [1001, 1001, 0, 1001, 1001, 1001, 0, 1001]
      
  3. 计算关联启动

    python">for i in range(n):for j in range(n):innerDis = abs(i - j)outerDis = n - innerDisminDis = min(innerDis, outerDis)launches[j] = min(launches[j], launches[i] + minDis)
    

    内关联和外关联是指在环形结构中,两个相邻发动机之间的启动时延计算方式。由于发动机是环形排列的,因此在计算从一个发动机启动到另一个发动机的时间时,有两种可能的路径:内关联和外关联。

内关联(Inner Association)

  • 定义:内关联是指在环形结构中,两个发动机之间的直接距离。
  • 计算方式:如果发动机 i 和发动机 j 的编号分别为 i 和 j,则内关联的时间为 abs(i - j),即它们之间的绝对差值。
  • 示例:假设有 8 个发动机,编号从 0 到 7。
    • 如果要从发动机 2 启动发动机 3,内关联时间为 abs(2 - 3) = 1
    • 如果要从发动机 6 启动发动机 7,内关联时间为 abs(6 - 7) = 1

外关联(Outer Association)

  • 定义:外关联是指在环形结构中,绕过环的另一侧到达目标发动机的距离。
  • 计算方式:外关联的时间为 n - abs(i - j),其中 n 是总的发动机数量。
  • 示例:继续以上面的例子:
    • 从发动机 2 启动发动机 3 的外关联时间为 8 - abs(2 - 3) = 8 - 1 = 7
    • 从发动机 6 启动发动机 7 的外关联时间为 8 - abs(6 - 7) = 8 - 1 = 7

选择最小时间

在计算从发动机 i 启动到发动机 j 的时间时,我们需要选择内关联和外关联中的最小值:

python">minDis = min(innerDis, outerDis)

这确保了我们计算的是从一个发动机到另一个发动机的最短时间。

总结

  • 内关联:直接相邻的距离,计算为 abs(i - j)

  • 外关联:绕过环的另一侧的距离,计算为 n - abs(i - j)

  • 在每次计算时,选择内关联和外关联中的最小值,以确保启动时间的最优化。

    • 这个双重循环用于计算每个发动机的最早启动时刻。

    • 例如:

      • i = 2(发动机 2 启动时刻为 0)时:
        • j = 0:内关联距离为 abs(2 - 0) = 2,外关联距离为 8 - 2 = 6,最短距离为 2。
          launches[0] = min(1001, 0 + 2) = 2
          
        • j = 1:内关联距离为 abs(2 - 1) = 1,外关联距离为 8 - 1 = 7,最短距离为 1。
          launches[1] = min(1001, 0 + 1) = 1
          
        • j = 3:内关联距离为 abs(2 - 3) = 1,外关联距离为 8 - 1 = 7,最短距离为 1。
          launches[3] = min(1001, 0 + 1) = 1
          
        • j = 4:内关联距离为 abs(2 - 4) = 2,外关联距离为 8 - 2 = 6,最短距离为 2。
          launches[4] = min(1001, 0 + 2) = 2
          
        • j = 5:内关联距离为 abs(2 - 5) = 3,外关联距离为 8 - 3 = 5,最短距离为 3。
          launches[5] = min(1001, 0 + 3) = 3
          
        • j = 6:内关联距离为 abs(2 - 6) = 4,外关联距离为 8 - 4 = 4,最短距离为 4。
          launches[6] = min(0, 0 + 4) = 0
          
        • j = 7:内关联距离为 abs(2 - 7) = 5,外关联距离为 8 - 5 = 3,最短距离为 3。
          launches[7] = min(1001, 0 + 3) = 3
          
    • i = 6(发动机 6 启动时刻为 0)时:

      • j = 0:内关联距离为 abs(6 - 0) = 6,外关联距离为 8 - 6 = 2,最短距离为 2。
        launches[0] = min(2, 0 + 2) = 2
        
      • j = 1:内关联距离为 abs(6 - 1) = 5,外关联距离为 8 - 5 = 3,最短距离为 3。
        launches[1] = min(1, 0 + 3) = 1
        
      • j = 2:内关联距离为 abs(6 - 2) = 4,外关联距离为 8 - 4 = 4,最短距离为 4。
        launches[2] = min(0, 0 + 4) = 0
        
      • j = 3:内关联距离为 abs(6 - 3) = 3,外关联距离为 8 - 3 = 5,最短距离为 3。
        launches[3] = min(1, 0 + 3) = 1
        
      • j = 4:内关联距离为 abs(6 - 4) = 2,外关联距离为 8 - 2 = 6,最短距离为 2。
        launches[4] = min(2, 0 + 2) = 2
        
      • j = 5:内关联距离为 abs(6 - 5) = 1,外关联距离为 8 - 1 = 7,最短距离为 1。
        launches[5] = min(3, 0 + 1) = 1
        
      • j = 7:内关联距离为 abs(6 - 7) = 1,外关联距离为 8 - 1 = 7,最短距离为 1。
        launches[7] = min(3, 0 + 1) = 1
        
    • 继续这个过程,直到所有发动机的启动时刻都被更新。最终,launches 列表将变为:

    launches = [2, 1, 0, 1, 2, 1, 0, 1]
    
  1. 找出最后被启动的发动机

    python">maxT = 0
    last = []
    for p in range(n):t = launches[p]if t < maxT:continueif t > maxT:maxT = tlast.clear()last.append(p)
    
    • 遍历 launches 列表,找出最后被启动的发动机:
      • p = 0t = 2,更新 maxT = 2last = [0]
      • p = 1t = 1,小于 maxT,跳过。
      • p = 2t = 0,小于 maxT,跳过。
      • p = 3t = 1,小于 maxT,跳过。
      • p = 4t = 2,等于 maxTlast = [0, 4]
      • p = 5t = 1,小于 maxT,跳过。
      • p = 6t = 0,小于 maxT,跳过。
      • p = 7t = 1,小于 maxT,跳过。
  2. 输出结果

    python">last.sort()
    print(len(last))
    print(" ".join(map(str, last)))
    
    • last 列表进行排序,最终 last = [0, 4]
    • 输出最后被启动的发动机数量和编号:
    2
    0 4
    

这段代码的逻辑是用来找出最后被启动的发动机的编号。我们逐行分析这段代码的功能:

  1. 初始化

    python">maxT = 0  
    last = []  
    
    • maxT 用于跟踪当前找到的最大启动时刻。
    • last 是一个列表,用于存储最后被启动的发动机的编号。
  2. 遍历所有发动机

    python">for p in range(n):  t = launches[p]  
    
    • 通过 for 循环遍历所有发动机(从 0 到 n-1),p 是当前发动机的编号。
    • t 是当前发动机的启动时刻,从 launches 列表中获取。
  3. 检查启动时刻

    python">if t < maxT:  continue  
    
    • 如果当前发动机的启动时刻 t 小于 maxT,则跳过当前循环,继续检查下一个发动机。这意味着当前发动机不是最后被启动的发动机。
  4. 更新最大启动时刻

    python">if t > maxT:  maxT = t  last.clear()  
    
    • 如果当前发动机的启动时刻 t 大于 maxT,则更新 maxTt
    • 同时,清空 last 列表,因为找到了一个新的最大启动时刻,之前的发动机编号不再是最后被启动的。
  5. 记录发动机编号

    python">last.append(p)  
    
    • 将当前发动机的编号 p 添加到 last 列表中。这意味着当前发动机是最后被启动的发动机之一。

http://www.ppmy.cn/news/1524180.html

相关文章

通信工程学习:什么是FDM频分复用、TDM时分复用、WDM波分复用、CDM码分复用

FDM频分复用、TDM时分复用、WDM波分复用、CDM码分复用 FDM频分复用、TDM时分复用、WDM波分复用、CDM码分复用是通信领域中常见的四种复用技术&#xff0c;它们各自具有不同的特点和应用场景。以下是对这四种复用技术的详细解释&#xff1a; 一、FDM频分复用&#xff08;Frequ…

Vue 中的 Vuex:全面解析与使用教程

什么是 Vuex&#xff1f; Vuex 是 Vue.js 官方提供的状态管理模式&#xff0c;专为 Vue.js 应用设计。它通过集中式存储管理应用中所有的组件状态&#xff0c;允许组件之间更方便地共享数据&#xff0c;并提供了一套规则来确保状态以可预测的方式发生变化。Vuex 对大型应用尤其…

Inspector里面可以编辑的变量相关

1.私有和保护变量无法在Inspector中编辑 2.给私有和保护变量加个特性[SerializeField]&#xff08;强制序列化字段特性&#xff09;就可以在inspector中看到和修改了 序列化就是把一个对象保存到一个文件或数据库字段中去 3.公共的也不让其显示编辑 给变量前加特性[HideInIn…

【Leetcode学习笔记】路径总和

【题目描述】给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 输入&#x…

Linux 信息安全:构建坚固的防御体系

摘要&#xff1a; 本文围绕 Linux 信息安全展开。阐述了 Linux 在信息技术中的重要地位&#xff0c;强调信息安全的重要性以及 Linux 信息安全面临复杂网络环境、演变攻击手段与内部威胁等挑战。详细介绍了 Linux 系统的安全架构与机制&#xff0c;包括用户与权限管理、文件系统…

HarmonyOS开发实战( Beta5.0)自定义组件冻结功能规范

自定义组件处于非激活状态时&#xff0c;状态变量将不响应更新&#xff0c;即Watch不会调用&#xff0c;状态变量关联的节点不会刷新。通过freezeWhenInactive属性来决定是否使用冻结功能&#xff0c;不传参数时默认不使用。支持的场景有&#xff1a;页面路由&#xff0c;TabCo…

vue3安装sass时报错:Embedded Dart Sass couldn‘t find the embedded compiler executable

vue3安装sass&#xff1a; npm install sass --save-dev 引用 <template><div class"c1"><h1>hello</h1></div> </template> <style lang"scss">.c1{background-color:red;h1{color:yellow;}} </style>报…

Nestjs微服务简单案例

相信大家&#xff0c;来看这篇博客&#xff0c;就应该知道微服务的概念。只是不太知道实用方法而已。下面我通过最简单的案例&#xff0c;来教会大家。 首先这是我的项目目录&#xff1a; nestwfw/ ├── app/ ├── project-microsericesapp 是web服务&#xff0c;用来接收…

HAL库学习目录查询表

日期内容2024.09.11基于STM32C8T6的CubeMX&#xff1a;HAL库点亮LED2024.09.11STMCuBeMX新建项目的两种匪夷所思的问题2024.09.11STMCubeMX文件下载后会出现其他项目无法下载的问题

如何在Vue实例上挂载自己定义的工具类

在实际的Vue开发中&#xff0c;我们经常需要在多个组件之间共享一些工具函数或类&#xff0c;比如格式化日期、处理字符串、操作数组等。这些工具类可以封装到一个独立的模块中&#xff0c;然后挂载到Vue实例上&#xff0c;方便在任何地方使用。本文将详细介绍如何在Vue实例上挂…

如何利用免费工具轻松设计出专业Logo?

Logo 作为品牌的象征和视觉核心&#xff0c;承载了品牌的价值和理念。无论是创业公司还是个人品牌&#xff0c;拥有一个独特的 Logo 都显得尤为重要。然而&#xff0c;设计一个专业的 Logo 通常需要高昂的设计费用&#xff0c;许多人因此望而却步。幸运的是&#xff0c;随着互联…

【平渊科技】项目拆解:小说推文项目 | 经验分享

目录 项目介绍 直接上操作教程 第一步&#xff1a;选文 第二步&#xff1a;改文 第三步&#xff1a;配音 第四步&#xff1a;剪辑 项目介绍 小说推文项目&#xff0c;可以说是市场上最常见的项目了。 我是去年十月份开始接触的&#xff0c;接触的比较晚了&#xff0c;我…

【H2O2|全栈】更多关于HTML(1)HTML进阶(一)

目录 HTML进阶知识 前言 准备工作 标签的扩展&#xff08;一&#xff09; 本文中的标签在什么位置使用&#xff1f; title标签 meta标签 name viewport referrer http-equiv charset content link标签 实际案例 可视部分 代码分析 其他标签 base标签 styl…

【Hot100算法刷题集】哈希-03-最长连续序列(含排序、哈希、并查集法未正确使用哈希表导致算法效率降低的分析)

&#x1f3e0;关于专栏&#xff1a;专栏用于记录LeetCode中Hot100专题的所有题目 &#x1f3af;每日努力一点点&#xff0c;技术变化看得见 题目转载 题目描述 &#x1f512;link->题目跳转链接 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#x…

hiricacp 连接池校验机制

一、背景 项目发生告警&#xff0c;但是并没有影响业务&#xff0c;看了下日志&#xff0c;红框里面有循环调用了3次 &#xff0c;一直以为是外部的重试在重试&#xff0c;但是外部确没有重试记录&#xff0c;就深扒了代码 二、想法 我知道hikaricp获取连接之后会校验连接的有…

一文读懂在线学习凸优化技术

一文读懂在线学习凸优化技术 在当今的数据驱动时代&#xff0c;机器学习算法已成为解决复杂问题的关键工具。在线学习凸优化作为机器学习中的一项核心技术&#xff0c;不仅在理论研究上具有重要意义&#xff0c;还在实际应用中展现出巨大的潜力。本文将深入浅出地介绍在线学习…

【CanMV K230 AI视觉】 人体检测

【CanMV K230 AI视觉】 人体检测 人体检测 动态测试效果可以去下面网站自己看。 B站视频链接&#xff1a;已做成合集 抖音链接&#xff1a;已做成合集 人体检测 人体检测是判断摄像头画面中有无出现人体&#xff0c;常用于人体数量检测&#xff0c;人流量监控以及安防监控等。…

Windows下使用MinGW编译安装zmq的步骤

背景&#xff1a; 在开发过程中&#xff0c;需要使用zmq库进行数据交互&#xff0c;因此需要编译zmq库。 安装步骤 软件下载 https://github.com/zeromq/libzmq.git 下载&#xff0c;将代码切换到git checkout 4c6cff6391分支 软件编译 cd .\libzmq\ mkdir build cd .\bu…

数学基础 -- 线性代数之矩阵的迹

矩阵的迹 什么是矩阵的迹&#xff1f; 矩阵的迹&#xff08;Trace of a Matrix&#xff09;是线性代数中的一个基本概念&#xff0c;定义为一个方阵主对角线上元素的总和。矩阵的迹在许多数学和物理应用中都起着重要作用&#xff0c;例如在矩阵分析、量子力学、统计学和系统理…

通过卷积神经网络(CNN)识别和预测手写数字

一&#xff1a;卷积神经网络&#xff08;CNN&#xff09;和手写数字识别MNIST数据集的介绍 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种深度学习模型&#xff0c;它在图像和视频识别、分类和分割任务中表现出色。CNN通过模仿…