5983. 同时运行 N 台电脑的最长时间(二分)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5983. 同时运行 N 台电脑的最长时间(二分)相关的知识,希望对你有一定的参考价值。

5983. 同时运行 N 台电脑的最长时间(二分)

考虑二分。

对于二分点 m i d mid mid如何判断。

显然 v a l ≥ m i d val\\ge mid valmid的电池给一台电脑供电,显然只会用到 m i d mid mid的电量。

这样为啥不拆开 v a l val val,因为给谁供电都一样是等价的。

然后对于 v a l < m i d val<mid val<mid的电池直接按顺序供电即可。

不存在同一时间 一个电池给多个供电。

假设若某个电池供完某一个电脑还有多的部分,供给下一个电脑,显然两个区间是不相交的,因为 v a l < m i d val<mid val<mid的。

v a l = s 1 + s 2 < m i d val=s_1+s_2<mid val=s1+s2<mid 所以 s 1 s_1 s1 s 2 s_2 s2不可能相交的。

class Solution 
public:
    long long maxRunTime(int n, vector<int>& a) 
        long long sum = accumulate(a.begin(),a.end(),0LL);
        long long l = 1, r = sum/n+1;
        long long ans=0;
        while(l<=r)
            long long mid = (l+r)>>1;
            long long s = 0;
            for(long long x:a) s+=min(x,mid);
            if(n*mid<=s) l = mid+1,ans=mid;
            else r=mid-1;
        
        return ans;
    
;

以上是关于5983. 同时运行 N 台电脑的最长时间(二分)的主要内容,如果未能解决你的问题,请参考以下文章

UVALive 5983 二分答案+dp

一台电脑上能否登录两个相同的云服务器

NOIP模拟:能源(二分答案)

一台电脑同时运行多个tomcat配置方法

[codevs1243]网络提速

计蒜客 最长不下降子序列 (贪心+二分nlogn算法)