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 val≥mid的电池给一台电脑供电,显然只会用到 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 台电脑的最长时间(二分)的主要内容,如果未能解决你的问题,请参考以下文章