第三场(C-牛牛晾衣服)

链接:https://ac.nowcoder.com/acm/contest/6220/C
来源:牛客网

题目描述
牛牛有n件带水的衣服,干燥衣服有两种方式。
一、是用烘***,可以每分钟烤干衣服的k滴水。
二、是自然烘干,每分钟衣服会自然烘干1滴水。
烘***比较小,每次只能放进一件衣服。
注意,使用烘***的时候,其他衣服仍然可以保持自然烘干状态,现在牛牛想知道最少要多少时间可以把衣服全烘干。

示例1
输入
3,[2,3,9],5
输出
3
说明
前两分钟对第三件衣服进行烘***烘干,使得衣服的水份分别为0,1,0,所以最快三分钟可以烘干。
备注:
第一个参数n(),代表一共有多少件衣服。
第二个参数为n个数()组成的数组,代表n件衣服分别有多少水滴水。
第三个参数k(),代表烘***每分钟能烘干k滴水。
程序应返回:一个整数,代表使n件衣服全部干燥所需要的最少的时间。
解题思路
显然,需要的最长时间是中的最大值。答案区间确定,可以采用二分答案的方法。
注意特殊情况k==1,这种情况下将烘***也当成自然烘干就好,直接返回最大值。
根据候选答案mid,判断mid是否满足条件(注意烘***的实际效果是每分钟烤干k-1滴水)。
代码

class Solution {
public:
    /**
     * 计算最少要多少时间可以把所有的衣服全烘干
     * @param n int整型 n件衣服
     * @param a int整型vector n件衣服所含水量数组
     * @param k int整型 烘***1分钟可以烘干的水量
     * @return int整型
     */
    int solve(int n, vector<int>& a, int k) {
        // write code here
        int l = 0, r = 0;
        for(int it : a) r = max(r, it);
        if(k == 1) return r;
        while(l < r) {
            int mid = l + (r - l) / 2, t = 0;
            for(int it : a) {
                if(it <= mid) continue;
                t += (it - mid + k - 2) / (k - 1);
                if(t > mid) break;
            }
            if(t > mid) l = mid + 1;
            else r = mid;
        }
        return l;
    }
};
全部评论

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
点赞 评论 收藏
分享
这一集&nbsp;硕士输的很惨
HoePointer:普通硕士的悲哀,高的进不去,低的要不起
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务