思路 (二分)
将衣服上的水升序排列,在排列中二分搜索最终的答案
即使用lower_bound找到满足条件的最小值
Java AC代码
import java.util.Arrays;
import java.util.Scanner;
/**
* https://ac.nowcoder.com/acm/problem/235254
*/
public class Main {
static int n, k;
static int[] a;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
a = new int[n];
for (int i = 0; i < n; ++i)
a[i] = in.nextInt();
k = in.nextInt() - 1;// 水量每分钟会减小k单位,其中k-1是吹风机吹干的
Arrays.sort(a);
if (k == 0) {
System.out.println(a[n - 1]);
} else {
int l = 1, r = a[n - 1];// 二分最终的答案
while (l < r) {
int m = l + (r - l >> 1);
if (check(m))
r = m;
else
l = m + 1;
}
System.out.println(r);
}
in.close();
}
private static boolean check(int m) {
int use = 0;// 吹干使用的时间
for (int i = 0; i < a.length; i++)
if (a[i] > m)
use += Math.ceil(1.0 * (a[i] - m) / k);
return use <= m;
}
}