孙悟空吃蟠桃 - 华为OD统一考试

2024-02-14 15:12

本文主要是介绍孙悟空吃蟠桃 - 华为OD统一考试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OD统一考试(C卷)

分值: 200分

题解: Java / Python / C++

alt

题目描述

孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵蟠桃树,每棵树上都桃子,守卫将在 H 小时后回来。

孙悟空可以决定他吃蟠桃的速度 K (个/每小时),每个小时选一棵桃树,并从树上吃掉 K 个,如果K大于该树上所有桃子个数,则全部吃掉,并且这一小时剩余的时间里不再吃桃。

孙悟空喜欢慢慢吃,但又想在守卫回来前吃完桃子。

请返回孙悟空可以在 H 小时内吃掉所有桃子的最小速度 KK 为整数)。如果以任何速度都吃不完所有桃子,则返回 0。

输入描述

第一行输入为 N个数字, N 表示桃树的数量,这 N 个数字表示每棵桃树上蟠桃的数量。

第二行输入为一个数字,表示守卫离开的时间 H

其中数字通过空格分割, NH 为正整数,每棵树上都有蟠桃,且 0<N<10000, 0 < H < 10000。

输出描述

输出吃掉所有蟠桃的最小速度 K,无解或输入异常时输出 0。

示例1

输入:
2 3 4 5
4输出:
5

示例2

输入:
2 3 4 5
3输出:
0

示例3

输入:
30 11 23 4 20
6输出:
23

题解

结合以上的题目和以下题目代码解法总结一些题解信息。

从以下几点方面: 题目属于什么类型的算法题(例如,动态规划、DFS、BFS、贪心、双指针 …),解题思路,代码大致描述,时间复杂度,空间复杂度,及同类型 leetcode.cn 的题目

Java

import java.util.Arrays;
import java.util.Scanner;/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 每棵桃树上蟠桃的数量int[] peachs = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 守卫离开的时间int H = scanner.nextInt();System.out.println(solve(peachs, H));}/*** 每个小时只能选一棵桃树,能否在 H 小时内吃完所有的桃子** @param peachs 每棵桃树上蟠桃的数量* @param speed  守卫每小时吃的桃子数量* @param H      守卫离开的时间* @return 每个小时只能选一棵桃树,能否在 H 小时内吃完所有的桃子*/private static boolean ok(int[] peachs, int speed, int H) {int time = 0;for (int cnt : peachs) {time += (cnt + speed - 1) / speed;  // 向上取整}return time <= H;}/*** 计算守卫在 H 小时内能吃完所有的桃子的最小速度** @param peachs 每棵桃树上蟠桃的数量* @param H      守卫离开的时间* @return 守卫在 H 小时内能吃完所有的桃子的最小速度*/private static int solve(int[] peachs, int H) {int n = peachs.length;// 每个小时只能选一棵桃树,因此任何速度都吃不完所有桃子if (n > H) {return 0;}int l = 0, r = Arrays.stream(peachs).max().orElse(0);while (l + 1 < r) {int mid = (l + r) / 2;if (ok(peachs, mid, H)) {r = mid;} else {l = mid;}}return r;}
}

Python

from typing import Listdef ok(peachs: List[int], speed: int, H: int) -> bool:""":param peachs: 每棵桃树上蟠桃的数量:param speed: 守卫每小时吃的桃子数量:param H: 守卫离开的时间:return:  每个小时只能选一棵桃树,能否在 H 小时内吃完所有的桃子"""time = 0for cnt in peachs:time += (cnt + speed - 1) // speed  # 向上取整return time <= Hdef solve(peachs: List[int], H: int) -> int:n = len(peachs)# 每个小时只能选一棵桃树,因此任何速度都吃不完所有桃子if n > H:return 0l, r = 0, max(peachs)while l + 1 < r:mid = (l + r) // 2if ok(peachs, mid, H):r = midelse:l = midreturn rif __name__ == '__main__':# 每棵桃树上蟠桃的数量peachs = list(map(int, input().split()))# 守卫离开的时间H = int(input())print(solve(peachs, H))

C++

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;/*** 每个小时只能选一棵桃树,能否在 H 小时内吃完所有的桃子** @param peachs 每棵桃树上蟠桃的数量* @param speed  守卫每小时吃的桃子数量* @param H      守卫离开的时间* @return 每个小时只能选一棵桃树,能否在 H 小时内吃完所有的桃子*/
bool ok(const vector<int>& peachs, int speed, int H) {int time = 0;for (int cnt : peachs) {time += (cnt + speed - 1) / speed;  // 向上取整if(time > H) return false;}return true;
}/*** 计算守卫在 H 小时内能吃完所有的桃子的最小速度** @param peachs 每棵桃树上蟠桃的数量* @param H      守卫离开的时间* @return 守卫在 H 小时内能吃完所有的桃子的最小速度*/
int solve(const vector<int>& peachs, const int H) {int n = peachs.size();// 每个小时只能选一棵桃树,因此任何速度都吃不完所有桃子if (n > H) {return 0;}int l = 0, r = *max_element(peachs.begin(), peachs.end());while (l + 1 < r) {int mid = (l + r) / 2;if (ok(peachs, mid, H)) {r = mid;} else {l = mid;}}return r;
}int main() {// 每棵桃树上蟠桃的数量vector<int> peachs;int peach;while (cin >> peach) {peachs.push_back(peach);}// 守卫离开的时间int H = peachs.back();peachs.pop_back();cout << solve(peachs, H) << endl;return 0;
}

相关练习题

题号题目难易
LeetCode 16311631. 最小体力消耗路径中等
LeetCode 22262226. 每个小孩最多能分到多少糖果中等

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

这篇关于孙悟空吃蟠桃 - 华为OD统一考试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

hdu 2093 考试排名(sscanf)

模拟题。 直接从教程里拉解析。 因为表格里的数据格式不统一。有时候有"()",有时候又没有。而它也不会给我们提示。 这种情况下,就只能它它们统一看作字符串来处理了。现在就请出我们的主角sscanf()! sscanf 语法: #include int sscanf( const char *buffer, const char *format, ... ); 函数sscanf()和