AlgoMooc
← 返回题库

P3302. 开放日活动

中等通过率 40% · 提交 1,520 · 通过 612
二分查找模拟

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

提示:带虚线的词点一下有通俗解释。

输入描述

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

输出描述

一个数组,表示从每个小桶里拿出的小球数量。

示例

示例 1

输入

14 7
2 3 2 5 5 1 4

输出

[0, 1, 0, 3, 3, 0, 2]

说明:小球总数为22,SUM = 14,超出范围了,需从小桶取球。 - maxCapacity = 1,取出球后,1 1 1 1 1 1 1, 桶里剩余小球总和为7,远小于14 - maxCapacity = 2,取出球后,2 2 2 2 2 1 2,桶里剩余小球总和为13,小于14 - maxCapacity = 3,取出球后,2 3 2 3 3 1 3,桶里剩余小球总和为16,大于14 因此选择maxCapacity为2 ,每个小桶小球数量大于 2 的都需要拿出来。

示例 2

输入

3 3
1 2 3

输出

[0, 1, 2]

说明:小球总数为6,SUM = 3,超出范围了,需从小桶取球。 取maxCapacity = 1,则小球总数为 3,从 0 号桶取出 0 个球,从 1 号桶取出 1 个球,从 2 号桶取出 2 个球。故输出[0, 1, 2]。

示例 3

输入

6 2
3 2

输出

[]

说明:小球总数为5,SUM = 6,无需从小桶取球;

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。