华为OD机考算法题:食堂供餐

目录

题目部分

解析与思路

代码实现


题目部分

题目食堂供餐
题目说明某公司员工食堂以盒饭方式供餐。为将员工取餐排队时间降低为0,食堂的供餐速度必须要足够快。现在需要根据以往员工取餐的统计信息,计算出一个刚好能达成排队时间为0的最低供餐速度。即,食堂在每个单位时间内必须至少做出多少份盒饭才能满足要求。
输入描述第1行为一个正整数N,表示食堂开餐时长。1 <= N <= 1000。
第2行为一个正整数M,表示开餐前食堂已经准备好的盒饭份数。pi <= M <= 1000。
第3行为N个正整数,用空格分隔,依次表示开餐时间内按时间顺序每个单位时间进入食堂取餐的人数Pi。1 <=i<= N,0<= Pi<=100。
输出描述一个整数,能满足题目要求的最低供餐速度(每个单位时间需要做出多少份盒饭)。
补充说明每人只取一份盒饭。
需要满足排队时间为0,必须保证取餐员工到达食堂时,食堂库存盒饭数量不少于本次来取餐的人数。
第一个单位时间来取餐的员工只能取开餐前食堂准备好的盒饭。
每个单位时间里制作的盒饭只能供应给后续单位时间来的取餐的员工。
食堂在每个单位时间里制作的盒饭数量是相同的。
------------------------------------------
示例
示例1
输入3
14
10 4 5
输出3
说明本样例中,总共有3批员工就餐,每批人数分别为10、4、5。
开餐前食堂库存14份。
 
食堂每个个单位时间至少要做出3份餐饭才能达成排队时间为0的目标。具体情况如下:
第一个单位时间来的10位员工直接从库存取餐。取餐后库存剩余4份盒饭,加上第一个单位时间做出的3份,库存有7份。
第二个单位时间来的4员工从库存的7份中取4份。取餐后库存剩余3份盒饭,加上第二个单位时间做出的3份,库存有6份。
第三个单位时间来的员工从库存的6份中取5份,库存足够。
  
如果食堂在单位时间只能做出2份餐饭,则情况如下:
第一个单位时间来的10位员工直接从库存取餐。取餐后库存剩余4份盒饭,加上第一个单位时间做出的2份,库存有6份。
第二个单位时间来的4员工从库存的6份中取4份。取餐后库存剩余2份盒饭,加上第二个单位时间做出的2份,库存有4份。
第三个单位时间来的员工需要取5份,但库存只有4份,库存不够。

解析与思路

题目解读

此题中,第1行是就餐员工的总批数,设为 count;第2行是初始库存数,设为 stockQty;第3行是每批次的份数,假设每批次的数字放到数组 dinners 中,那么dinners的长度为count,且dinners[i] 即为第 ( i + 1 ) 个批次所需的份数(备注:批次起始值为1,放到数组的第 0 个元素)。

假设题目中最低的供餐速度为 x(x为正整数),那么 对于所有的 i ( 0 <= i <= count),x 必须满足 ( stockQty + x * i) >=  \sum_{idx=0}^{i} dinners[idx]。其中, \sum_{idx=0}^{i} dinners[idx] 代表着dinners数组的前 i 个元素之和,即 \sum_{idx=0}^{i} dinners[idx] = dinners[0] + dinners[1] + … + dinners[i]。

分析思路

设置 x 的初始值为0。

根据不等式 ( stockQty + x * i) >=  \sum_{idx=0}^{i} dinners[idx],对于 i, 从 0 到 ( count -1 ) ,判断当前的 x 值是否保证不等式成立:

  • 如果不等式成立,则不进行任何操作;
  • 如果不等式不成立,即 x 值过小,重新计算 x 的值。x 的新值必定比老值更大。
    我们知道,当 从 0 到 ( i - 1 ), x 的老值都能保证不等式成立,现在 x 的值变大了,不等式的左边比以前更大。这意味着这个不等式对于 x 的新值在 0 到 ( i - 1 )  一定是成立的。

最终计算出的 x 即是题目要求的值。

此算法只需要遍历一次 dinners 数组,时间复杂度为 o(n);由于使用了辅助数组,其空间复杂度也为o(n)。


代码实现

Java代码

import java.util.Scanner;/*** 食堂供餐* @since 2023.09.05* @version 0.1* @author Frank**/
public class Dinners {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 第一行输入就餐的批次String strCount = sc.nextLine();int count = Integer.parseInt( strCount );// 第二行输入初始库存数String strStockQty = sc.nextLine();int stockQty = Integer.parseInt( strStockQty );// 第三行输入每批次所需的午餐份数// 此处dinners中的元素都是String,后面需要转换成int处理String strDinners = sc.nextLine();String[] dinners = strDinners.split(" "); // dinners.length == countint currentSumNeeded = 0;int x = 0;int currentStock = stockQty;for( int i = 0; i < count; i ++ ){currentStock = stockQty + i * x;currentSumNeeded += Integer.parseInt( dinners[i] );	if( currentStock < currentSumNeeded ){// 计算最小的 x(新值必定比当前的x大),确保 currentStock >= currentSumNeededint diff = currentSumNeeded - stockQty;int tmpX =  diff / i;if( diff % i != 0 ){tmpX ++;}x = tmpX;}}System.out.println( x );}
}

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {let input = [];while (line = await readline()) {input.push(line);}// 第一行,进餐的批次var strCount = input[0];var count = parseInt(strCount);// 第二行,初始库存数var strStockQty = input[1];var stockQty = parseInt(strStockQty);// 第三行,每批次需要的份数var strDinners = input[2].split(" ");var currentSumNeeded = 0;var x = 0;var currentStock = stockQty;for (var i = 0; i < count; i++) {currentStock = stockQty + i * x;currentSumNeeded += parseInt(strDinners[i]);if (currentStock < currentSumNeeded) {// 计算最小的 x(新值必定比当前的x大),确保 currentStock >= currentSumNeededvar diff = currentSumNeeded - stockQty;var tmpX = parseInt(diff / i);if (diff % i != 0) {tmpX++;}x = tmpX;}}console.log(x);
}();

(完)

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

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

相关文章

LORA项目源码解读

大模型fineturn技术中类似于核武器的LORA&#xff0c;简单而又高效。其理论基础为&#xff1a;在将通用大模型迁移到具体专业领域时&#xff0c;仅需要对其高维参数的低秩子空间进行更新。基于该朴素的逻辑&#xff0c;LORA降低大模型的fineturn门槛&#xff0c;模型训练时不需…

【力扣每日一题】2023.9.3 消灭怪物的最大数量

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目比较长&#xff0c;我概括一下就是有一群怪物&#xff0c;每只怪物离城市的距离都不一样&#xff0c;并且靠近的速度也不一样&#x…

工厂设计模式

github&#xff1a;GitHub - QiuliangLee/pattern: 设计模式 概念 根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式&#xff0c;根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。 简单工厂模式、工厂方法模式和抽象工厂模式有何区别&#xff1f; - 知…

SimVODIS++: Neural Semantic Visual Odometry in Dynamic Environments 论文阅读

论文信息 题目&#xff1a;SimVODIS: Neural Semantic Visual Odometry in Dynamic Environments 作者&#xff1a;Ue-Hwan Kim , Se-Ho Kim , and Jong-Hwan Kim , Fellow, IEEE 时间&#xff1a;2022 来源&#xff1a; IEEE ROBOTICS AND AUTOMATION LETTERS&#xff08;RAL…

shell知识点复习

1、shell能做什么&#xff08; Shell可以做任何事(一切取决于业务需求) &#xff09; 自动化批量系统初始化程序 自动化批量软件部署程序 应用管理程序 日志分析处理程序 自动化备份恢复程序 自动化管理程序 自动化信息采集及监控程序 配合Zabbix信息采集 自动化扩容 2、获取当…

【疑难杂症】解决 git 文件夹不显示绿色图标和红色图标的问题

目录 一、问题描述 二、问题解决前提 【2.1】首先保证电脑本机上有TortoiseGit这个软件 【2.2】TortoiseGit下载官网 【2.3】根据自己电脑位数进行下载&#xff0c;这里下载的是64位 【2.4】下载好之后&#xff0c;一路next进行安装&#xff0c;配置自己的邮箱和用户名 …

【TypeScript学习】—面向对象(四)

【TypeScript学习】—面向对象&#xff08;四&#xff09; 一、面向对象 二、类 三、构造方法 class Dog{name:string;age:number;//构造函数constructor(name:string,age:number){this.namename;this.ageage;}bark(){//在方法中可以通过this来表示当前调用方法的对象//this表…

Springboot整合AOP实现日志的保存

1.定义注解 /*** 系统日志元注解*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface LogFilter {String value() default "" ; } 2.编写切面的实现 Aspect Component public class LogAspect {private static final …

[极客大挑战 2019]FinalSQL(bypass盲注)

这里是数字型注入&#xff0c;选择一个序号 fuzz ?id1这里过滤了很多东西 使用fuzzSQL字典&#xff0c;这是我自己定义编写的一个fuzz字典&#xff0c;内容较少 select from information . tables whereand " or | & union columns updatexml extractvalue databa…

微信小程序给 thinkphp后端发送请求出现错误 Wrong number of segments 问题的解决 【踩坑记录】

微信小程序给 thinkphp后端发送请求出现错误 Wrong number of segments 问题的解决 【踩坑记录】 微信小程序代码部分PHP后端部分错误显示解决方案及步骤&#xff08;总结&#xff09; 微信小程序代码部分 //给后端接口发送一个json请求,并且得通过token鉴权ToUpdatePwd(){wx.r…

【MySQL】一文详解MySQL,从基础概念到调优

作者简介 前言 博主之前写过一个MySQL的系列&#xff0c;从基础概念、SQL到底层原理、优化&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12305262.html?spm1001.2014.3001.5482 本文会是这个系列的清单&#xff0c;拉通来聊一聊Mysql从基础概…

通讯软件019——分分钟学会Prosys OPC UA Server配置

本文介绍如何配置Prosys OPC UA Simulation Server&#xff0c;通过本文可以对OPC UA的基本概念有所了解&#xff0c;掌握OPC UA的本质。更多通信资源请登录网信智汇(wangxinzhihui.com)。 1、启动OPC UA Server Prosys OPC UA Simulation Server启动后就处于运行状态。 2、配…

【ARM CoreLink 系列 1 -- CoreLink 系列 产品介绍】

文章目录 ARM CoreLink 介绍ARM CoreLink InterconnectARM CoreLink 处理器外设ARM CoreLink Memory Controllers ARM CoreLink 介绍 ARM的CoreLink系列产品是一套能够进行高效互联的组件和工具&#xff0c;它们用于构建高性能、低功耗的嵌入式和消费电子设备。CoreLink产品系…

CUDA小白 - NPP(4) 图像处理 Data Exchange and Initialization(1)

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…

【MySQL】表的约束

目录 MySQL表的约束 空属性 默认值 列描述 zerofill 主键 自增长 唯一键 外键 综合案例 MySQL表的约束 真正约束字段的是数据类型&#xff0c;如果插入的数据超出了对应数据类型的取值范围&#xff0c;那么数据将会插入失败。但是数据类型的约束很单一&#xff0c;为…

webpack(四)plugin

定义 和loader的区别 loader:文件加载器&#xff0c;能够加载资源&#xff0c;并对这些文件进行一些处理&#xff0c;诸如编译、压缩等&#xff0c;最终一起打包到指定的文件中。plugin:赋予了webpack各种灵活的功能&#xff0c;例如打包优化、资源管理、环境变量注入等&…

C++初阶:C++入门

目录 一.iostream文件 二.命名空间 2.1.命名空间的定义 2.2.命名空间的使用 三.C的输入输出 四.缺省参数 4.1.缺省参数概念 4.2.缺省参数分类 4.3.缺省参数注意事项 4.4.缺省参数用途 五.函数重载 5.1.重载函数概念 5.2.C支持函数重载的原理--名字修饰(name Mangl…

第 2 章 线性表(学生健康登记表实现)

1. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值正确 */ #define INFEASI…

【自学开发之旅】Flask-回顾--对象拆分-蓝图(二)

url-统一资源定位符-不同的url对应不同的资源 作为服务端&#xff0c;url和视图函数的映射关系就是路由。 定义传递参数的方式&#xff1a; 1.创建动态url app.route("/login2/<username>/<passwd>") def login2(username, passwd):if username "…

数据分析和可视化平台:Splunk Enterprise for mac v9.1.1激活版 兼容m1

Splunk Enterprise 是一个数据分析和可视化平台&#xff0c;可帮助企业理解其数据。虽然没有适用于 Mac OS 的 Splunk Enterprise 官方版本&#xff0c;但他们确实为 Mac OS 提供了一个名为“Splunk Light”的应用程序&#xff0c;它提供了基本的数据索引、搜索和仪表板。或者&…