華為OD --- 流浪地球

華為OD --- 流浪地球

  • 題目
  • 獨立實現
    • 基本思路
    • 代碼實現
  • 其他答案
    • 實現思路
    • 代碼實現

題目

在這里插入圖片描述

獨立實現

基本思路

1、首先把題目給出的啟動機器初始化成數組,
2、用for循環模擬每隔1s更新這個初始化數組的前后兩個機器. (源碼中的updateTimeCount函數)
3、for循環每次循環后會檢查當前啟動機器列表是否全部啟動(源碼中的chechList函數)并保存當前的啟動機器列表(preStartMachineList)
4、如果機器沒有全部啟動 重復 2 - 3 流程
5、如果機器全部啟動了 拿preStartMachineList中保存的值去和0 - n-1的數組做差值比較,那么這個差值肯定就是最后啟動的機器列表

代碼實現

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();const readline = async () => (await iter.next()).value;void (async function () {// 保存總數和啟動數const [allCount, startCount] = (await readline()).split(" ");// Write your code herelet inputIndex = 0;// 記錄發動機啟動時間和序號的列表let machineInfo = [];while (inputIndex < Number(startCount)) {const inputLine = await readline();const [startTime, startIndex] = inputLine.split(" ");if (!machineInfo[startTime]) {machineInfo[startTime] = [];}machineInfo[startTime].push([startIndex]);inputIndex++;}machineInfo.filter((item) => item);// 用來保存全部啟動之前的機器列表 和全部啟動之后的機器列表之差就是最后啟動的機器數let preStartMachineList = [];// console.log("machineInfo", machineInfo);const updateTimeCount = (currentIndex) => {// console.log("resultList", JSON.stringify(resultList));resultList.forEach((result) => {// 小于當前時間戳,需要更新時間if (result && result.timeCount < currentIndex) {const steps = currentIndex - result.timeCount;result.startMachine = result.startMachine.map((item) => {const centerNumber = item[Math.floor(item.length / 2)];return [centerNumber - steps < 0? allCount - Math.abs(centerNumber - steps): centerNumber - steps,...item,centerNumber + steps >= allCount? 0 + Math.abs(allCount - (centerNumber + steps)): centerNumber + steps,];});// result.timeCount = currentIndex;}});// console.log("updateTimeCount", resultList?.[0]?.startMachine);};const chechList = (list) => {const startedMachine = Array.from(new Set(list.map((item) => item.startMachine).flat(Number.MAX_SAFE_INTEGER)));// console.log("checklist", startedMachine);if (startedMachine.length >= allCount) {return true;} else {preStartMachineList = startedMachine;return false;}};const resultList = [];// console.log("machineInfo", machineInfo);for (let i = 0; i < allCount; i++) {if (machineInfo[i]) {resultList.push({timeCount: i,startMachine: machineInfo[i].map((item) => [Number(item)]),});}updateTimeCount(i);// 全部啟動完成 后續循環跳過if (chechList(resultList)) {// console.log("finish", preStartMachineList);const lastStartMachineList = [];for (let j = 0; j < allCount; j++) {if (!preStartMachineList.includes(j)) {lastStartMachineList.push(j);}}console.log(lastStartMachineList.length);console.log(lastStartMachineList.join(" "));break;}}
})();

其他答案

實現思路

1、初始化一個項數為n的數組 初始化為無限大,表示機器的啟動時間
2、通過兩次遍歷找出所有機器的啟動時間 以0 2 0 6為例
3、最后得出的數組為[2,1,0,1,2,1,0,1]
3、最大的數就是最晚啟動時間,輸出最大數的個數以及index即可

代碼實現

	const rl = require("readline").createInterface({ input: process.stdin });var iter = rl[Symbol.asyncIterator]();const readline = async () => (await iter.next()).value;void (async function () {//   保存總發動機數量和首次啟動的發動機數量const [allCount, startCount] = (await readline()).split(" ").map(Number); // allCount = 8; startCount = 2const startTimeList = new Array(allCount).fill(Number.MAX_SAFE_INTEGER); // 初始化一個機器啟動時間數組 這個數組有8項 [最大值,最大值,最大值....] 因為最開始的啟動時間是未知的,所以這里我們初始化為最大值,表示機器啟動需要無限大時間let inputIndex = 0;do {// 在這里讀取機器啟動時間,比如0,2 表示機器2在第0秒啟動const [startTime, startIndex] = (await readline()).split(" ").map(Number);startTimeList[startIndex] = startTime;inputIndex++;} while (inputIndex < startCount);//  所以經過讀取輸入(0,2) (0,6)之后的startTimeList為[最大值,最大值,0,最大值,最大值,最大值,0,最大值]//   1、這里植入下對環數據結構最小啟動時間的理解,可以看到第2號機器和第6號機器都是從0秒啟動//   2、從第5號(實際上從任何機器開始都可以,隨便舉的🌰)機器的啟動時間開始分析,0 1 2 3 4 5 6 7//   3、因為是環形結構,所以機器的啟動時間實際就看和首批機器啟動時間的絕對值取小值就行了 比如第5號機器距離2號機器 有兩種方向 2 3 4 5需要3秒時間(5-2) 另一種走法需要2 1 0 7 6 5 需要5秒時間8-(5-2) 所以最終取到的是3和5之間的小值3秒//   4、但是因為6號機器也是第0秒啟動 所以5號機器從6號機器出發的路徑是 6 5 方向1需要6 5 1s(6-5)方向2 6 7 0 1 2 3 4 5 需要7秒(8-(6-5)) 取小值 1s//   5、綜上取到的5號機器的實際啟動時間是1s和3秒之間的小值 所以5號機器最終的啟動時間是1s.// 按照這個方法類推,可以推出所有機器的啟動時間for(let i=0;i<allCount;i++){for(let j=0;j<allCount;j++){// 方向1需要的啟動時間const direction_left = Math.abs(j - i)// 方向2需要的啟動時間const direction_right = allCount - Math.abs(j - i)// 取小值const minDistance = Math.min(direction_left, direction_right)startTimeList[i] = Math.min(startTimeList[i], startTimeList[j] + minDistance)}}const maxDistance = Math.max(...startTimeList)const resultList = []startTimeList.forEach((item, index) => {if(item === maxDistance) resultList.push(index)})console.log(resultList.length)console.log(resultList.join(' '))})();

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63442.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63442.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63442.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DataOps驅動數據集成創新:Apache DolphinScheduler SeaTunnel on Amazon Web Services

引言 在數字化轉型的浪潮中&#xff0c;數據已成為企業最寶貴的資產之一。DataOps作為一種文化、流程和實踐的集合&#xff0c;旨在提高數據管道的質量和效率&#xff0c;從而加速數據從源頭到消費的過程。白鯨開源科技&#xff0c;作為DataOps領域的領先開源原生公司&#xf…

【硬件IIC】stm32單片機利用硬件IIC驅動OLED屏幕

之前操作OLED屏幕都是用GPIO模擬IIC去驅動&#xff0c;最近打算用硬件IIC去驅動&#xff0c;于是寫下這個demo,在這個過程中遇到一點小坑&#xff0c;記錄一下&#xff0c;本文章非小白教程&#xff0c;所以只突出踩到的坑點&#xff0c;文章中涉及到的OLED也是網上資料寫爛的&…

python如何自動加空格

首先&#xff0c;需要進行打開的一個pycharm的軟件&#xff0c;可進行雙擊的打開該軟件。 可以看到的是在當前的打開的文件中&#xff0c;格式相對較亂一下。格式不對會格式錯誤。 然后點擊菜單欄中的“code”。 在彈出的下拉菜單中選擇“reformat code”選項。 可以看到的是在…

【開源免費】基于SpringBoot+Vue.JS網上訂餐系統(JAVA畢業設計)

本文項目編號 T 018 &#xff0c;文末自助獲取源碼 \color{red}{T018&#xff0c;文末自助獲取源碼} T018&#xff0c;文末自助獲取源碼 目錄 一、系統介紹二、演示錄屏三、啟動教程四、功能截圖五、文案資料5.1 選題背景5.2 國內外研究現狀5.3 可行性分析 六、核心代碼6.1 新…

串口通信和SPI通信詳解

0、背景 在現代嵌入式系統中&#xff0c;通信是不同模塊之間交換數據的核心。串口通信和 SPI&#xff08;串行外設接口&#xff09;是兩種常見的通信方式&#xff0c;它們各自有獨特的優勢和適用場景。 1、串口通信 1.1、串口通信概念 串口通信是一種常見的異步串行通信協議…

javase-17、API.數學相關

一、Math類 Math類提供了大量的靜態方法來便于我們實現數學計算&#xff0c;如求絕對值、取最大或最小值等。 https://doc.qzxdp.cn/jdk/17/zh/api/java.base/java/lang/Math.html 所在模塊&#xff1a;java.base所在包&#xff1a; java.lang static double abs(double a)…

答題考試系統v1.6.1高級版源碼分享+uniapp+搭建測試環境

一.系統介紹 一款基于FastAdminThinkPHPUniapp開發的小程序答題考試系統&#xff0c;支持多種試題類型、多種試題難度、練題、考試、補考模式&#xff0c;提供全部前后臺無加密源代碼&#xff0c;支持私有化部署 二.測試環境 系統環境&#xff1a;CentOS、 運行環境&#x…

淺談倉頡語言的優劣

倉頡語言&#xff0c;作為華為自研的新一代編程語言&#xff0c;以其高效、安全、現代化的特點&#xff0c;引起了廣泛的關注。 倉頡語言的優勢 高效并發 倉頡語言的一大亮點是其輕松并發的能力。它實現了輕量化用戶態線程和并發對象庫&#xff0c;使得高效并發變得輕松。倉頡…

Sass系統數據隔離的三種方式

1.完全獨立的數據庫 為每一個租戶單獨部署一個數據庫 優點&#xff1a;達到了真正的按租戶進行隔離&#xff0c;不同租戶之間相互沒有影響&#xff0c;可以針對一些特殊租戶例如大客戶做一些定制化的開發&#xff0c;計費相對簡單&#xff0c;按照資源使用進行計費。 缺點&…

FFmpeg 主要結構體剖析

FFmpeg 探索之旅 FFmpeg 主要結構體剖析 FFmpeg 探索之旅前言1、AVFormatContext2、AVCodecContext3、AVCodec4、AVStream5、AVPacket6、AVFrame7、AVCodecParameters7、SwsContext8、AVIOContext9、AVRational 總結 前言 嘿&#xff0c;各位小伙伴&#xff01;在如今這個多媒…

經典電荷泵/Charge pump——1998.JSSC

電路結構 工作原理 M3 and M4 are the series switches, and M5, M6 switch to the highest voltage. If M5 and M6 are missing, having a large capacitor is of absolute necessity, because must always stay between 2 Vin and 2Vin - Uj to avoid switching on the vert…

Swin transformer 論文閱讀記錄 代碼分析

該篇文章&#xff0c;是我解析 Swin transformer 論文原理&#xff08;結合pytorch版本代碼&#xff09;所記&#xff0c;圖片來源于源paper或其他相應博客。 代碼也非原始代碼&#xff0c;而是從代碼里摘出來的片段&#xff0c;配上簡單數據&#xff0c;以便理解。 當然&…

GPT-Omni 與 Mini-Omni2:創新與性能的結合

近年來&#xff0c;隨著人工智能技術的飛速發展&#xff0c;各種模型和平臺應運而生&#xff0c;以滿足從個人用戶到企業級應用的多樣化需求。在這一領域&#xff0c;GPT-Omni 和 Mini-Omni2 是兩款備受矚目的技術產品&#xff0c;它們憑借獨特的設計和強大的功能&#xff0c;在…

龍迅#LT7911E適用于EDP/DP/TPYE-C轉MIPIDSI應用,支持圖像處理功能,內置I2C,主應用副屏顯示,投屏領域!

1. 描述 LT7911E 是一款高性能 eDP 轉 MIPI D-PHY 轉換器&#xff0c;旨在將 eDP 源連接到 MIPI 顯示面板。 LT7911E 集成了一個符合 eDP1.4 標準的接收器&#xff0c;支持 1.62Gbps 至 5.67Gbps 的輸入數據&#xff0c;以 270Mbps 的遞增步長&#xff0c;以及一個 2 端口 D…

C語言——實現求出最大值

問題描述&#xff1a;利用C語言自定義函數求出一維數組里邊最大的數字 //利用函數找最大數#include<stdio.h>int search(int s[9]) //查找函數 {int i , max s[0] , max_xia 0;for(i0;i<9;i){if(s[i] > max){max_xia i;max s[max_xia];}}return max; } in…

解鎖 draw.io 流程圖制作工具Docker私有化部署(2/2)

一、draw.io 流程圖制作工具簡介 &#xff08;一&#xff09;基礎介紹 draw.io 是一款備受青睞的開源流程圖軟件&#xff0c;它有著諸多優點。首先&#xff0c;其界面十分整潔有序&#xff0c;完全沒有廣告的干擾&#xff0c;并且所有功能都是免費向用戶開放的&#xff0c;這一…

[HNCTF 2022 Week1]baby_rsa

源代碼&#xff1a; from Crypto.Util.number import bytes_to_long, getPrime from gmpy2 import * from secret import flag m bytes_to_long(flag) p getPrime(128) q getPrime(128) n p * q e 65537 c pow(m,e,n) print(n,c) # 62193160459999883112594854240161159…

docker run命令大全

docker run命令大全 基本語法常用選項基礎選項資源限制網絡配置存儲卷和掛載環境變量重啟策略其他高級選項示例總結docker run 命令是 Docker 中最常用和強大的命令之一,用于創建并啟動一個新的容器。該命令支持多種選項和參數,可以滿足各種使用場景的需求。以下是 docker ru…

Java中JDBC過時方法的替代方案以及JDBC為什么過時詳細分析

在Java中&#xff0c;JDBC的一些方法因為安全問題、性能問題或者因為引入了更好的替代方法已經被標記為過時&#xff08;Deprecated&#xff09;。 以下是一些被過時的JDBC方法以及它們的替代方案&#xff1a; 1.DriverManager.getDrivers(): 這個方法用于獲取所有當前注冊的J…

詳細指南:在Ubuntu 20.04 ROS 1環境下設置和使用OpenNI2 SDK

詳細指南&#xff1a;在Ubuntu 20.04 ROS 1環境下設置和使用OpenNI2 SDK 要在Ubuntu 20.04系統上使用ROS 1環境中的OpenNI2 SDK&#xff0c;您需要按照一系列有組織的步驟進行操作&#xff0c;以確保軟件和驅動正確安裝&#xff0c;并配置好相應的開發環境。以下是詳細的步驟說…