2024年华为OD机试真题- 爱吃蟠桃的孙悟空-(C++/Java/python)-OD统一考试(C卷D卷)

  2024华为OD机试真题目录-(B卷C卷D卷)-【C++ Java Python】   

题目描述

孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵桃树,

每颗树上都有桃子,守卫将在 H 小时后回来。

孙悟空可以决定他吃蟠桃的速度K(个/小时),每个小时选一颗桃树,

并从树上吃掉 K 个,如果树上的桃子少于 K 个,则全部吃掉,

并且这一小时剩余的时间里不再吃桃。

孙悟空喜欢慢慢吃,但又想在守卫回来前吃完桃子。

请返回孙悟空可以在 H 小时内吃掉所有桃子的最小速度 K(K为整数)。

如果以任何速度都吃不完所有桃子,则返回0。

输入描述

第一行输入为 N 个数字,N 表示桃树的数量,这 N 个数字表示每颗桃树上蟠桃的数量。

第二行输入为一个数字,表示守卫离开的时间 H。

其中数字通过空格分割,N、H为正整数,每颗树上都有蟠桃,且 0 < N < 10000,0 < H < 10000。

输出描述

吃掉所有蟠桃的最小速度 K,无解或输入异常时输出 0。

用例1

输入

2 3 4 5

4

输出

5

用例2

输入

2 3 4 5

3

输出

0

考点

二分查找

解题思路

我们可以在速度的范围 [1, max_piles] 中进行二分查找,

每次取中间值 mid 作为孙悟空的吃蟠桃速度,然后计算以该速度吃蟠桃需要的时间。

如果时间小于等于给定的时间 h,说明孙悟空可以在给定时间内吃完所有蟠桃,

我们可以尝试更小的速度;否则说明孙悟空不能在给定时间内吃完所有蟠桃,

我们需要尝试更大的速度。最终,当速度的范围缩小到只剩下一个数时,

该数就是孙悟空吃蟠桃的最小速度。

代码
c++
#include <bits/stdc++.h>
using namespace std;

int main() {
    int tmp,h;
    vector<int> vec;
    int hi=0;
    while(cin>>tmp) {
        vec.push_back(tmp);
        hi=max(hi,tmp); //取出最大值
        if(cin.get()=='\n') {break;}
    }
    cin>>h;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dijkstra2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值