首页 > 编程语言 >【华为OD-E卷-取出尽量少的球 100分(python、java、c++、js、c)】

【华为OD-E卷-取出尽量少的球 100分(python、java、c++、js、c)】

时间:2024-12-25 15:31:53浏览次数:6  
标签:balls capacity python OD 小球 数组 小桶 java total

【华为OD-E卷-取出尽量少的球 200分(python、java、c++、js、c)】

题目

某部门开展 Family Day 开放日活动,其中有个从桶里取球的游戏,游戏规则如下:
有 N 个容量一样的小桶等距排开,且每个小桶都默认装了数量不等的小球,每个小桶装的小球数量记录在数组 bucketBallNums 中,
游戏开始时,要求所有桶的小球总数不能超过 SUM,如果小球总数超过 SUM,则需对所有的小桶统一设置一个容量最大值 maxCapacity,并需将超过容量最大值的小球拿出来,直至小桶里的小球数量小于 maxCapacity。
请您根据输入的数据,计算从每个小桶里拿出的小球数量?
限制规则一:所有小桶的小球总和小于 SUM,则无需设置容量值 maxCapacity,并且无需从小桶中拿球出来,返回结果[] 限制规则二:如果所有小桶的小球总和大于 SUM,则需设置容量最大值 maxCapacity,并且需从小桶中拿球出来,返回从每个小桶拿出的小球数量组成的数组

输入描述

  • 第一行输入 2 个正整数,数字之间使用空格隔开,其中:

第一个数字表示 SUM 第二个数字表示 bucketBallNums 数组长度 第二行输入 N 个正整数,数字之间使用空格隔开,表示 bucketBallNums 的每一项

输出描述

  • 从每个小桶里拿出的小球数量,并使用一维数组表示

备注

  • 1 ≤ bucketBallNums[i] ≤ 10^9 1 ≤ bucketBallNums.length = N ≤ 10^5 1 ≤ maxCapacity ≤ 10^9 1 ≤ SUM ≤ 10^9

用例

用例一:
输入:
14 7
2 3 2 5 5 1 4
输出:
[0,1,0,3,3,0,2]
用例二:
输入:
3 3
1 2 3
输出:
[0,1,2]
用例三:
输入:
6 2
3 2
输出:
[]

python解法

  • 解题思路:
  • 输入解析:从用户输入中解析出总容量total、数组长度length和包含球的数量的数组balls。
    目标:调整balls中每个元素的数量,确保调整后的总和小于或等于total,并返回移除的球的数量数组。
    二分搜索优化:
    用二分法计算调整的临界值min_capacity和max_capacity,逐步缩小范围以找到满足条件的分配方案。
    每次尝试一个中间值mid_capacity,计算每个桶需要移除的数量,如果结果不满足条件,则调整搜索范围。
    输出结果:返回移除的球的数量数组。
def parse_input():
    # 解析输入,获取总容量、数组长度和球的数量数组
    total, length = map(int, input().split())  # 输入总容量和数组长度
    balls = list(map(int, input().split()))    # 输入每个桶的球数量
    return total, length, balls

def calculate_removed_balls(total, balls, length):
    current_sum = sum(balls)  # 计算当前球的总数
    if current_sum <= total:
        return "[]"  # 如果总数已经小于或等于总容量,无需移除

    max_capacity = max(balls)          # 最大球数量
    min_capacity = total // length     # 计算理论上的最小分配容量

    # 初始结果数组,计算每个桶超出的球数量
    result = [x - min_capacity if x > min_capacity else 0 for x in balls]

    # 使用二分搜索优化移除球的数量
    while max_capacity - min_capacity > 1:
        mid_capacity = (max_capacity + min_capacity) // 2  # 计算中间值
        # 临时结果数组,假设移除到 mid_capacity
        tmp_result = [x - mid_capacity if x > mid_capacity else 0 for x in balls]
        remaining_sum = current_sum - sum(tmp_result)  # 计算移除后的总和

        if remaining_sum > total:
            max_capacity = mid_capacity  # 总和仍大于总容量,减少容量
        elif remaining_sum < total:
            min_capacity = mid_capacity  # 总和小于总容量,增加容量
            result = tmp_result          # 更新结果数组
        else:
            result = tmp_result  # 精确匹配,直接返回结果
            break

    # 返回结果数组的字符串形式
    return "[" + ",".join(map(str, result)) + "]"

def main():
    total, length, balls = parse_input()  # 解析输入
    print(calculate_removed_balls(total, balls, length))  # 计算并输出结果

if __name__ == "__main__":
    main()

java解法

  • 解题思路
更新中

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

更新中

JS解法

  • 解题思路

更新中

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

标签:balls,capacity,python,OD,小球,数组,小桶,java,total
From: https://blog.csdn.net/CodeClimb/article/details/144539118

相关文章

  • 数据同步工具: mysql表级全量同步 / mongodb全量+增量同步 / redis全量+增量同步
    目录数据同步工具方案说明MySql同步方案概述配置说明MongoDB同步方案概述配置说明Redis同步方案概述配置说明启动同步服务文件准备启动服务数据同步工具mysql表级全量同步/mongodb全量+增量同步/redis全量+增量同步源码地址:https://github.com/jiashuaizhang/sync-jobs......
  • mongodb配置zabbix监控
    mongodb配置zabbix监控目录mongodb配置zabbix监控说明一、添加mongodb模版二、配置宏三测试连接:注意事项通过脚本方式添加监控项1.修改运行zabbixagent脚本的用户2.添加如下用户自定义脚本3.添加如下用户自定义脚本附脚本:db_monitor.confjkalert.shjkcur_connect.shjkdelay.shjk......
  • 【开源免费】基于SpringBoot+Vue.JS学生评奖评优管理系统(JAVA毕业设计)
    本文项目编号T096,文末自助获取源码\color{red}{T096,文末自助获取源码}......
  • 【开源免费】基于SpringBoot+Vue.JS植物健康系统(JAVA毕业设计)
    本文项目编号T095,文末自助获取源码\color{red}{T095,文末自助获取源码}......
  • ROS(Python)简易笔记 3.运行管理
    前言在多级层深的ROS系统中,其实现与维护可能会出现一些问题。运行管理部分就是为了解决这些问题。这一章有元功能包、launch文件管理、和一些重名情况的处理。元功能包元功能包就是把一些功能包打包到一起,当需要安装这些功能包时可以直接调用元功能包,而不需要逐个安装。......
  • PySide6-FluentUI-QML 使用记录 python + pyside6 + qml
    PySide6-FluentUI-QML是一个ui库,官网地址为https://github.com/zhuzichu520/FluentUI作用:美化qml文件,快速构建项目简单使用1.pipinstallpyside6安装pyside62.pipinstallPySide6-FluentUI-QML安装PySide6-FluentUI-QML3.加载fluentui##main.pyimportsysimpor......
  • JDK-8中的JAVA_OPTS通常用于传递给JVM的启动参数
    在JDK8中,JAVA_OPTS通常用于传递给JVM的启动参数。以下是一些常见的JAVA_OPTS项及其说明:内存管理-Xms:设置Java堆的初始大小,例如-Xms512m。-Xmx:设置Java堆的最大大小,例如-Xmx1024m。-Xmn:设置年轻代的大小。-XX:PermSize=size:设置永久代的初始大小(在JDK8中被Metaspace取代......
  • msyql innodb缓存池的命中率
    msyqlinnodb缓存池的命中率1.showstatuslikeshowstatuslike'%innodb_buffer_pool_read%';Innodb_buffer_pool_read_requests逻辑读表示向innodb缓存池进行逻辑读额次数Innodb_buffer_pool_reads物理读表示从物理磁盘读取数据的次数msyqlinnodb缓存池的命中率=(Inn......
  • python : iterable & iterator
    python:iterable&iterator正文在Python中,可迭代对象(Iterable)和迭代器(Iterator)是两个相关但不同的概念,它们都与遍历元素的能力相关。理解它们的区别非常重要,尤其是在编写Python程序时需要处理迭代时。1.Iterable(可迭代对象)一个对象如果是可迭代的,意味着它可以返回一个......
  • Linux:code:network:devinet_sysctl_forward;IN_DEV_FORWARD
    文章目录简介sysctl设置使用,arp_process间接使用IN_DEV_RX_REDIRECTSdev_disable_lro简介最近在看Linux里的forwarding的功能。顺便在这里总结一下。有些详细代码逻辑,如果可以记录一下,会好一点。sysctl设置这个函数在查看的时候需要注意的问题:变量名起的有......