【2024最新华为OD-C卷试题汇总】传递悄悄话的最长时间(100分) - 三语言AC题解(Python/Java/Cpp)

本文主要是介绍【2024最新华为OD-C卷试题汇总】传递悄悄话的最长时间(100分) - 三语言AC题解(Python/Java/Cpp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

文章目录

  • 前言
    • 🧭 机试备考指南
    • 💊 传递悄悄话的最长时间
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🍓 AC代码截图 ✅

前言

🧭 机试备考指南

  • 华为OD的题库大半年跟新一次,也就是说,一旦跟新,那么本年用的题目就是从该题库种选题,大概有100~200道左右

  • 最近考试换为C/D卷,C/D卷题库是一样的,D卷为双机位监控,某些外包公司应聘的为D卷。

  • 为此清隆帮大家搜集并整理了C卷的题库,后续会由清隆的ACM银牌团队将题目整理后搬上OJ,支持在线评测

💊 传递悄悄话的最长时间

题目描述

在一个大家庭的聚会上,家庭成员站在由二叉树形式组织的位置上。每个位置上有一人,每个人之间的连接代表一条传递悄悄话的路径,且这条路径上有一个时间消耗。现在,根位置的K小姐想将一个悄悄话传递给所有人。每个连接的数字表示K小姐传递悄悄话给该节点的人所需额外时间。请计算使得所有家庭成员都听到这个悄悄话所需的最长时间。

输入格式

输入包含一行,由空格隔开的整数序列。这个序列以层序遍历的方式描述了一个二叉树,其中 -1 表示空节点。序列的第一个数字是根节点,表示从K小姐开始的时间为0。

输出格式

输出一个整数,表示所有节点都接收到悄悄话的最长时间。

样例输入

0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2

样例输出

38

数据范围

输入的二叉树节点个数不超过 1000 1000 1000,时间都是非负整数,不超过 100 100 100

题解

这个题目的核心是对二叉树进行遍历,并计算从根节点到每一个节点的路径时间。由于使用的是层序遍历的输入方式,我们可以使用队列来帮助我们构造这个二叉树,并同时计算从根节点到其他节点的时间。我们需要追踪的是从根节点到每个节点的累计时间,最终输出最大的那个时间,即为所有人都接收到悄悄话的最长时间。

参考代码

  • Cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;int main() {vector<int> input;int tmp;while (cin >> tmp) {input.push_back(tmp);}if (input.empty() || input[0] == -1) {cout << "0" << endl;return 0;}queue<pair<int, int>> q; // pair<index, time>q.push({0, input[0]});int maxTime = 0;while (!q.empty()) {auto [index, currTime] = q.front();q.pop();maxTime = max(maxTime, currTime);int leftChildIndex = 2 * index + 1;int rightChildIndex = 2 * index + 2;if (leftChildIndex < input.size() && input[leftChildIndex] != -1) {q.push({leftChildIndex, currTime + input[leftChildIndex]});}if (rightChildIndex < input.size() && input[rightChildIndex] != -1) {q.push({rightChildIndex, currTime + input[rightChildIndex]});}}cout << maxTime << endl;return 0;
}
  • Python
from queue import Queueinput_str = input().split()
input = [int(x) if x != '-1' else -1 for x in input_str]if not input or input[0] == -1:print("0")exit()q = Queue()
q.put((0, input[0]))
max_time = 0while not q.empty():index, curr_time = q.get()max_time = max(max_time, curr_time)left_child_index = 2 * index + 1right_child_index = 2 * index + 2if left_child_index < len(input) and input[left_child_index] != -1:q.put((left_child_index, curr_time + input[left_child_index]))if right_child_index < len(input) and input[right_child_index] != -1:q.put((right_child_index, curr_time + input[right_child_index]))print(max_time)
  • Java
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class MaxSumPath {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String[] inputStr = scanner.nextLine().split(" ");int[] input = new int[inputStr.length];for (int i = 0; i < inputStr.length; i++) {input[i] = Integer.parseInt(inputStr[i]);}if (input.length == 0 || input[0] == -1) {System.out.println("0");return;}Queue<Pair> queue = new LinkedList<>();queue.add(new Pair(0, input[0]));int maxTime = 0;while (!queue.isEmpty()) {Pair pair = queue.poll();int index = pair.index;int currTime = pair.time;maxTime = Math.max(maxTime, currTime);int leftChildIndex = 2 * index + 1;int rightChildIndex = 2 * index + 2;if (leftChildIndex < input.length && input[leftChildIndex] != -1) {queue.add(new Pair(leftChildIndex, currTime + input[leftChildIndex]));}if (rightChildIndex < input.length && input[rightChildIndex] != -1) {queue.add(new Pair(rightChildIndex, currTime + input[rightChildIndex]));}}System.out.println(maxTime);}static class Pair {int index;int time;Pair(int index, int time) {this.index = index;this.time = time;}}
}

🍓 AC代码截图 ✅

  • Python
    在这里插入图片描述

这篇关于【2024最新华为OD-C卷试题汇总】传递悄悄话的最长时间(100分) - 三语言AC题解(Python/Java/Cpp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002717

相关文章

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St