首页 > 编程语言 >【华为OD机试】真题A卷-快速开租建站(Python)

【华为OD机试】真题A卷-快速开租建站(Python)

时间:2024-03-23 20:58:34浏览次数:48  
标签:入度 真题 Python OD 部署 任务 task time import

一、题目描述

【华为OD机试】真题A卷-快速开租建站(Python)

题目描述:

当前IT部门支撑了子公司颗粒化业务,该部门需要实现为子公司快速开租建站的能力,建站是指在一个全新的环境部署一套IT服务。

1:每个站点开站会由一系列部署任务项构成,每个任务项部署完成时间都是固定和相等的,设为1.

2:部署任务项之间可能存在依赖,假如任务2依赖任务1,那么等任务1部署完,任务2才能部署。

3:任务有多个依赖任务则需要等所有依赖任务都部署完该任务才能部署。

4:没有依赖的任务可以并行部署,优秀的员工们会做到完全并行无等待的部署。

给定一个站点部署任务项和它们之间的依赖关系,请给出一个站点的最短开站时间。

二、输入输出

输入描述:
第一行是任务数taskNum,
第二行是任务的依赖关系数relationsNum接下来 relationsNum 行,每行包含两个id,描述一个依赖关系,格式为: IDi IDj,表示部署任务部署完成了,部署任务自容署,IDi 和 IDj值的范围为: [0,taskNum) 注: 输入保证部署任务之间的依赖不会存在环。
输出描述:
1个整数,表示一个站点的最短开站时间。
备注:
1 < taskNum ≤ 100
1 ≤ relationsNum ≤ 5000

三、参考示例

示例1:
输入:
5
5
0 4
1 2
1 3
2 3
2 4
输出:
3
说明:
先同时部署任务0和任务1,然后部署任务2,最后同时部署任务3和任务4.最短开站时间为3
示例2:
输入:
5
3
0 3
0 4
1 3
输出:
2
说明:
先同时部署任务0,任务1,任务2。然后再同时部署任务3和4.最短开站时间为2.

四、解题思路

  1. 处理输入,读取任务数量和关系数量,以及任务之间的关系。
  2. 初始化每个任务的入度和出度。
  3. 遍历关系列表,更新每个任务的出度和入度。
  4. 使用队列存储入度为0的任务,并设置初始耗时为1。
  5. 遍历队列中的任务,更新相关任务的入度,如果入度为0,则更新耗时并加入队列。
  6. 输出最终的耗时结果。

五、参考代码 

# -*- coding: utf-8 -*-
'''
@Time    :   2023/12/10 00:09:00
@Author  :   mgc 
@Version :   1.0
@Desc    :   None
'''

# import os
# import re
# import sys
# import copy
# import math
# import queue
# import functools
# from queue import Queue
# from collections import Counter, defaultdict

import sys

# 处理输入
num_tasks = int(input())
num_relations = int(input())
relations = []
for _ in range(num_relations):
    relations.append([int(x) for x in input().split(" ")])  # 添加缺失的右括号

# 初始化每个任务的入度和出度
in_degrees = [0 for _ in range(num_tasks)]
out_edges = [[] for _ in range(num_tasks)]

# 初始化入度和出度
for relation in relations:
    out_edges[relation[0]].append(relation[1])
    in_degrees[relation[1]] += 1

# 使用队列来存储入度为0的任务
queue = []
result_time = 1

for i in range(num_tasks):
    # 将所有入度为0的任务加入队列,默认耗时为1
    if in_degrees[i] == 0:
        queue.append([i, result_time])

while len(queue) > 0:
    current_task = queue.pop(0)
    task_id = current_task[0]
    time = current_task[1]

    for downstream_task in out_edges[task_id]:
        # 当前任务的入度减少到0时,放入队列中
        in_degrees[downstream_task] -= 1
        if in_degrees[downstream_task] == 0:
            result_time = time + 1
            queue.append([downstream_task, result_time])

print(result_time)

六、华为OD机试真题汇总目录

    【华为OD机试】真题汇总A+B+C+D券(Python实现)

    【华为OD机试】真题汇总A+B+C+D卷(JAVA实现)

    【华为OD机试】真题汇总A+B+C+D卷(C++实现)

标签:入度,真题,Python,OD,部署,任务,task,time,import
From: https://blog.csdn.net/u014481728/article/details/136969471

相关文章

  • 【华为OD机试】真题A卷-快递业务站(JAVA)
    一、题目描述【华为OD机试】真题A卷-快递业务站(JAVA)题目描述:快递业务范围有N个站点,A站点与B站点可以中转快递,则认为A-B站可达,如果A-B可达,B-C可达,则A-C可达。现在给N个站点编号0、1、…n-1,用s[i][j]表示i-j是否可达,s[i][j]=1表示i-j可达,s[i][j]=0......
  • LeetCode刷题记录——day5
    1、https://leetcode.cn/problems/roman-to-integer/solutions/1/bao-li-po-jie-by-a-studentdog-s1va/?envType=study-plan-v2&envId=top-interview-150关键在于创建字典classSolution{public:intromanToInt(strings){unordered_map<string,int>m=......
  • 跳马【华为OD机试JAVA&Python&C++&JS题解】
    一.题目马是象棋(包括中国象棋和国际象棋)中的棋子,走法是每步直一格再斜一格,即先横着或直着走一格,然后再斜着走一个对角线,可进可退,可越过河界,俗称“马走‘日’字。给顶m行n列的棋盘(网格图),棋盘上只有有棋子象棋中的棋子“马”,并且每个棋子有等级之分,等级为k的马可以跳1~k......
  • Python实战:Lambda函数与匿名函数
    一、引言在Python编程中,Lambda函数和匿名函数是两种特殊的函数定义方式,它们可以提高代码的简洁性和可读性。Lambda函数和匿名函数通常用于简单的函数表达式,如数据处理和函数式编程。本文将详细介绍Python中的Lambda函数与匿名函数,并通过具体代码示例展示它们的应用。二、L......
  • Podman能够替代Docker吗
    导读:参考:ExploringPodman:AMoreSecureDockerAlternative作者:MarinBezhanov网址:https://betterstack.com/community/guides/scaling-docker/podman-vs-docker/该随笔为文章部分摘要和学习笔记架构区别Docker属于CS架构(client-server),Podman利用了无守护架构(daemonless......
  • Python日志记录
    Python的logging模块是一个内置的标准库,它为编写程序时生成、记录和管理日志信息提供了强大而灵活的功能。日志对于软件开发至关重要,尤其是在调试、监控应用状态、追踪异常行为、分析性能瓶颈以及审计等方面。入门级的logging应用主要是掌握如何在简单的Python程序中引入loggi......
  • python-day02
    python判断语句if、elif、elseif条件:结果elif条件:结果else条件:结果随件数产生importrandom#随机产生1-10的随机数num=random.randint(1,10)while循环while条件:循环体eg:while循环实现九九乘法表i=1whilei<=9:j=1whi......
  • python实现列1的数据补充到列2
    具体代码(我是以一个数据较少的csv文件做了测试,具体的csv文件需要修改部分代码才能顺利实现)importpandasaspddf01=pd.read_csv("D:\\12140\\Desktops\\111\\333\\333.csv",encoding="utf-8",dtype="str")data=df01['新增'].fillna('no_zeng......
  • python环境搭建及特定操作系统注意事项
    文章目录搭建Python环境通用的流程:**1.下载并安装Python解释器****2.验证安装****3.安装包管理器(pip)****4.安装必要的开发工具****5.创建虚拟环境(推荐)****6.安装项目所需的库****7.配置IDE/编辑器**特定操作系统(如Windows、macOS、Linux)的特定步骤或注意事项**Wi......
  • Python虚拟环境conda的安装使用
    文章目录conda虚拟环境的详细步骤和注意事项:**安装Conda****创建Conda虚拟环境****激活Conda虚拟环境****安装Python包****管理Conda环境****其他优势与特性**相较于`venv`,使用`conda`管理虚拟环境有以下优势:**性能****资源占用****其他性能与资源相关因素****结论**......