传送门 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; } };