最新华为OD机试
2025华为od 机试2025B卷-华为机考OD2025年B卷
题目描述
小明有 n 块木板,第 i ( 1 ≤ i ≤ n ) 块木板长度为 ai。
小明买了一块长度为 m 的木料,这块木料可以切割成任意块,拼接到已有的木板上,用来加长木板。
小明想让最短的模板尽量长。请问小明加长木板后,最短木板的长度可以为多少?
输入描述
输入的第一行包含两个正整数, n ( 1 ≤ n ≤ 10^3 ), m ( 1 ≤ m ≤ 10^6 ),n 表示木板数, m 表示木板长度。
输入的第二行包含 n 个正整数, a1, a2,…an ( 1 ≤ ai ≤ 10^6 )。
输出描述
输出的唯一一行包含一个正整数,表示加长木板后,最短木板的长度最大可以为多少?
用例
输入 | 5 3 4 5 3 5 5 |
输出 | 5 |
说明 | 给第1块木板长度增加1,给第3块木板长度增加2后, 这5块木板长度变为[5,5,5,5,5],最短的木板的长度最大为5。 |
输入 | 5 2 4 5 3 5 5 |
输出 | 4 |
说明 | 给第3块木板长度增加1后,这5块木板长度变为[4,5,4,5,5],剩余木料的长度为1。此时剩余木料无论给哪块木板加长,最短木料的长度都为4。 |
解题思路
采用贪心的思想:循环遍历木料的长度,每次都给最短的木板补一米的长度。补完之后重新排序,重复补一米的操作。知道木料用完。
采用优先队列(最小堆)来解决这个问题。以下是详细的解题思路:
- 首先,从输入中读取木板数量
n
和木料长度m
。 - 接下来,读取
n
个木板的长度,并将