【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 机器人搬砖(100分) - 三语言AC题解(Python/Java/Cpp)

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

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

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

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

📎在线评测链接

https://app5938.acapp.acwing.com.cn/contest/2/problem/OD1061
🌍 评测功能需要 ⇒ 订阅专栏 ⇐ 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • 🎧 机器人搬砖
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码

🎧 机器人搬砖

问题描述

K小姐的仓库里有 N N N 堆砖块,第 i i i 堆中有 b r i c k s [ i ] bricks[i] bricks[i] 块砖。她的机器人需要在 8 8 8 小时内将所有砖块搬完。机器人每小时可以搬运的砖块数量取决于它的能量格数。为了尽量减少机器人的损耗,K小姐希望每次给机器人充能时,能量格数尽可能少。

已知机器人每小时只能在一个仓库搬砖,且每次充能获得的能量格只在当前小时内有效。请你帮助K小姐计算出,为了在 8 8 8 小时内完成搬砖任务,每次给机器人充能时最少需要多少能量格。

输入格式

输入一行,包含若干个用空格分隔的正整数,分别表示每堆砖块的数量,即 b r i c k s [ 1 ] bricks[1] bricks[1] b r i c k s [ N ] bricks[N] bricks[N]

输出格式

输出一个整数,表示每次给机器人充能时最少需要的能量格数。

8 8 8 小时内无法完成搬砖任务,则输出 − 1 -1 1

样例输入

30 12 25 8 19

样例输出

15

样例输入

10 12 25 8 19 8 6 4 17 19 20 30

样例输出

-1

数据范围

  • 1 ≤ N ≤ 100 1 \le N \le 100 1N100
  • 1 ≤ b r i c k s [ i ] ≤ 100 1 \le bricks[i] \le 100 1bricks[i]100

题解

本题可以使用二分查找的思路来解决。我们可以把每次充能的能量格数作为二分查找的目标值,判断在该能量格数下是否能在 8 8 8 小时内完成搬砖任务。

具体做法如下:

  1. 初始化二分查找的区间为 [ 1 , m a x ( b r i c k s ) ] [1, max(bricks)] [1,max(bricks)],其中 m a x ( b r i c k s ) max(bricks) max(bricks) 表示所有堆砖块数量的最大值。

  2. 在每次二分查找的过程中,取区间的中点作为当前的能量格数 m i d mid mid

  3. 遍历每堆砖块,计算出搬完所有砖块需要的总时间 n u m num num,其中搬完第 i i i 堆砖块需要的时间为 ⌈ b r i c k s [ i ] m i d ⌉ \lceil \frac{bricks[i]}{mid} \rceil midbricks[i]

  4. 如果 n u m ≤ 8 num \le 8 num8,说明当前的能量格数 m i d mid mid 可以满足要求,我们继续在 [ 1 , m i d ] [1, mid] [1,mid] 的范围内进行二分查找;否则,我们在 [ m i d + 1 , m a x ( b r i c k s ) ] [mid+1, max(bricks)] [mid+1,max(bricks)] 的范围内进行二分查找。

  5. 当二分查找的区间左右端点相等时,搜索结束,返回最终的能量格数即可。

  6. 如果搜索结束时,最终的能量格数仍无法满足在 8 8 8 小时内完成搬砖任务,就返回 − 1 -1 1

参考代码

  • Python
def min_energy(bricks):n = len(bricks)if n > 8:return -1left, right = 1, max(bricks)while left < right:mid = (left + right) // 2num = sum((x + mid - 1) // mid for x in bricks)if num <= 8:right = midelse:left = mid + 1return leftbricks = list(map(int, input().split()))
print(min_energy(bricks))
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String[] input = scanner.nextLine().split(" ");int n = input.length;int[] bricks = new int[n];for (int i = 0; i < n; i++) {bricks[i] = Integer.parseInt(input[i]);}System.out.println(minEnergy(bricks));}private static int minEnergy(int[] bricks) {int n = bricks.length;if (n > 8) {return -1;}int left = 1, right = 0;for (int x : bricks) {right = Math.max(right, x);}while (left < right) {int mid = left + (right - left) / 2;int num = 0;for (int x : bricks) {num += (x + mid - 1) / mid;}if (num <= 8) {right = mid;} else {left = mid + 1;}}return left;}
}
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int minEnergy(vector<int>& bricks) {int n = bricks.size();if (n > 8) {return -1;}int left = 1, right = *max_element(bricks.begin(), bricks.end());while (left < right) {int mid = left + (right - left) / 2;int num = 0;for (int x : bricks) {num += (x + mid - 1) / mid;}if (num <= 8) {right = mid;} else {left = mid + 1;}}return left;
}int main() {string input;getline(cin, input);vector<int> bricks;size_t pos = 0;while ((pos = input.find(' ')) != string::npos) {bricks.push_back(stoi(input.substr(0, pos)));input.erase(0, pos + 1);}bricks.push_back(stoi(input));cout << minEnergy(bricks) << endl;return 0;
}

时间复杂度: O ( N log ⁡ M ) O(N \log M) O(NlogM),其中 N N N 是砖堆的数量, M M M 是砖块数量的最大值。二分查找的次数为 O ( log ⁡ M ) O(\log M) O(logM),每次二分查找需要遍历所有砖堆,耗时 O ( N ) O(N) O(N)

空间复杂度: O ( 1 ) O(1) O(1)。只需要常数级别的额外空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么缩小pdf文件大小

在数字化时代&#xff0c;pdf文件已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着pdf文件内容的增多&#xff0c;其大小也会相应增加&#xff0c;这给文件的传输、存储和共享带来了诸多不便。因此&#xff0c;如何有效地压缩pdf文件大小&#xff0c;成为了…

【Kafka】Kafka生产者数据重复、数据有序、数据乱序-07

【Kafka】Kafka生产者数据重复、数据有序、数据乱序-07 1. 数据重复1.1 数据传递语义1.2 幂等性1.2.1 如何开启幂等性1.2.2 同一个消息&#xff0c;多个分区都会存在吗&#xff1f; 1.3 事务1.3.1 Kafka 事务原理1.3.2 Kafka事务的作用和意义作用具体应用场景 2. 数据有序3. 数…

Python数据可视化:直方图、核密度估计图、箱线图、累积分布函数图

本文使用数据来源自2023年数学建模国赛C题&#xff0c;以附件1、附件2数据为基础&#xff0c;通过excel的数据透视表等功能重新汇总了一份新的数据表&#xff0c;从中截取了一部分数据为例用于绘制图表。绘制的图表包括一维直方图、一维核密度估计图、二维直方图、二维核密度估…

[机器学习算法] Q学习

Q学习&#xff08;Q-Learning&#xff09;是一种基于值的强化学习算法&#xff0c;用于在给定状态下选择动作&#xff0c;以最大化累积奖励。它通过不断更新一个称为Q表&#xff08;Q-table&#xff09;的表来学习动作的价值。 一、理解基本概念 状态 (State, S) 这是环境的…

Matlab数学建模实战应用:案例2 - 传染病传播

目录 前言 一、问题分析 二、模型建立 三、Matlab代码实现 四、模型验证 灵敏度分析 五、模型应用 实例总结 总结 前言 传染病传播模型是公共卫生和流行病学的重要研究内容&#xff0c;通过数学建模可以帮助我们理解传染病的传播规律和趋势&#xff0c;以便制定有效的…

【Python】使用OpenCV特征匹配检测图像中的【特定水印】

如果没有方向 往哪里走都是前方 做自己的光 不需要多亮 曾受过的伤 会长出翅膀 大雨冲刷过的天空会更加明亮 流过泪的眼睛也一样 做自己的光 悄悄的发亮 逆风的方向 更容易飞翔 世界怎样在于你凝视它的目光 那未曾谋面过的远方 或许就在身旁 &#x1f3b5…

设计软件有哪些?景观插件篇,渲染100邀请码1a12

建立大型景观也是设计师常用的设计方法&#xff0c;我们介绍一些景观插件。 1、AutoGrass AutoGrass是用于快速生成逼真的草地和植被场景的3ds Max插件&#xff0c;它提供了大量的草地预设和工具&#xff0c;使用户能够轻松地创建各种各样的草地效果&#xff0c;包括草地、草…

web 腾讯地图怎么设置卫星底图??

引用腾讯地图JavaScript SDK (腾讯地图引用文档) 设置卫星底图代码如下&#xff1a;官网示例 new TMap.Map("container", {// zoom: 16, //设置地图缩放级别zoom: 17.2, //设置地图缩放级别center: new TMap.LatLng(lat, long), //设置地图中心点坐标pitch: 35, //…

EOS Black灵魂回响黑色联机需要加速吗 超好用的联机加速器推荐

灵魂回响黑色是一款全新的MMORPG游戏&#xff0c;游戏在提供沉浸感超强的剧情的同时&#xff0c;也带来了压倒性的游戏画质。同时&#xff0c;游戏的职业系统十分自由&#xff0c;从人物属性到装备属性、到技能搭配、甚至到职业都可以任意DIY&#xff0c;把角色养成发挥到了极致…

有了它,再也不用为客户管理而烦恼

在竞争激烈的市场环境中&#xff0c;有效的客户关系管理&#xff08;CRM&#xff09;系统是企业获取商机、提高成单效率的关键。搭贝CRM管理系统是基于市场业务需求量身定制的&#xff0c;通过记录客户360度画像和跟进信息&#xff0c;实现客户管理的精细化和高效流转。 &#…

关系数据理论

什么是关系数据理论&#xff1a;用来评判数据库逻辑设计“好坏程度”的标准&#xff1b;二是如果逻辑设计中存在“不好”的关系模式&#xff0c;如何将其修改为“好”的关系模式。 函数依赖&#xff1a;举个例子:学生表中&#xff0c;一个学生的学生号确定了&#xff0c;学生的…

ai创作是什么?分享ai创作的方法

ai创作是什么&#xff1f;在当今这个信息爆炸的时代&#xff0c;文字的力量愈发显得重要。无论是日常沟通还是专业创作&#xff0c;我们都需要用文字来表达自己&#xff0c;传递思想。然而&#xff0c;面对海量的信息和快速变化的世界&#xff0c;如何高效地生成高质量的文字内…

力扣SQL50 有趣的电影 简单查询

Problem: 620. 有趣的电影 Code select * from cinema where id % 2 1 and description ! boring order by rating desc;

Python-gui开发之Pycharm+pyside6/Pyqt6环境搭建

Python-gui开发之Pycharm+pyside6/Pyqt6环境搭建 软件版本一、软件安装1、Python安装2、Pycharm安装3、pyside6或pyqt6安装①安装pyside6②安装PyQt6和pyqt6-tools二、Pycharm项目配置1、插件安装2、新建项目以及环境配置3、包管理安装三、在Pycharm中配置PySide61、pyside6 Qt…

SEO之预估流量及价值(二)

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 &#xff08;接上一篇。。。。&#xff09; 2、点击率 搜索结果页面各排名位置点击率也不精确。前面介绍的…

Java代码如何运行

通过前面的第一篇文章&#xff0c;对JVM整体脉络有了一个大概了解。第二篇文章我们通过对高级语言低级语言不同特性的探讨引出了Java的编译过程。有了前面的铺垫&#xff0c;咱们今天正式进入Java到底是如何运行起来的探讨。 目前大部分公司都是使用maven作为包管理工具&#x…

「PS图像软件下载」Adobe Photoshop专业图像处理软件资源获取!

Photoshop&#xff0c;无论是对于初学者还是资深设计师&#xff0c;Photoshop都以其易上手且深度足够的特性&#xff0c;赢得了广泛的赞誉。 在修图方面&#xff0c;Photoshop的表现尤为出色。无论是调整色彩平衡、裁剪图片&#xff0c;还是去除瑕疵、增强细节&#xff0c;Phot…

Matlab数学建模实战应用:案例4 - 图像处理

目录 前言 一、图像处理基础 二、Matlab图像处理工具箱 三、案例&#xff1a;图像锐化、去噪和分割 步骤 1&#xff1a;读取和显示图像 步骤 2&#xff1a;图像锐化 步骤 3&#xff1a;图像去噪 步骤 4&#xff1a;图像分割 完整代码示例 四、实际应用 实例总结 总…

如何选择理想CDN服务商来提升网站性能

在数字时代&#xff0c;网络速度已成为衡量网站成功的关键指标之一。快速加载的网站不仅提升用户体验&#xff0c;还对网站的搜索引擎排名产生显著影响。用户期望网站能够迅速响应其请求&#xff0c;而任何延迟都可能导致用户不满和流失。研究表明&#xff0c;网站加载时间的每…

openh264 帧级码率控制原理:RcCalculateIdrQp 函数

RcCalculateIdrQp函数 功能 在码控中&#xff0c;当eSliceType为I_SLICE时 计算 IDR 帧的帧级量化参数QP 值。 原理过程 初始化变量&#xff1a; dBpp&#xff1a;初始化为0&#xff0c;用来存储比特率每像素&#xff08;bits per pixel&#xff09;的值。i&#xff1a;一个…