传送门 https://ac.nowcoder.com/acm/contest/6220/C
二分答案, 具体细节见代码
class Solution {
public:
int solve(int n, vector<int>& a, int k) {
// write code here
sort(a.begin(), a.end());
int ans = 0, l = 1, r = a[n-1], mid;
// 二分的原因是答案一定在 a1- an 之间 最不济自然烘干an分钟, 全部都干了
while(l < r) {
mid = (l+r)>>1;
int t = mid;
for(int i = 0; i < n; i++) {
// 对每次枚举的答案 计算当自然烘干不能完全烘干时, 分配最少的时间烘干
// 如果所有的衣服分配时间都能烘干 则答案有效
if(a[i] > mid) {
t -= (a[i]-mid)/(k-1);
// k-1 的原因是开始的时候设定是全部自然烘干, 所以当这件衣服要用烘***的时候 烘***使用的每分钟都
// 多了开始设定的自然烘干值1, 所以烘***效率其实只有 k-1
if((a[i]-mid) % (k-1)) t--;
}
if(t < 0) break;
}
if(t < 0) l = mid+1;
else r = mid;
}
return (l+r) >>1;
}
};



京公网安备 11010502036488号