import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[][] hw = new int[n][2];
for (int i = 0; i < n; i++) {
int h = sc.nextInt();
int w = sc.nextInt();
hw[i][0] = Math.max(h, w);
hw[i][1] = Math.min(h, w);
sc.nextLine();
}
int left = 1;
//获取最大的边
int right = Arrays.stream(hw).mapToInt(pair -> Math.max(pair[0], pair[1])).max().getAsInt();
//二分法找到满足条件的最大的边
while (left < right) {
int sum = 0;
// 注意:这里向上取整,使得 left 在跳出循环时一定是解
int mid = left + (int)Math.ceil((right - left) / 2.0);
for (int j = 0; j < n; j++) {
int length = hw[j][0] / mid;
int width = hw[j][1] / mid;
sum += length * width;
}
if (sum >= k) {
left = mid;
} else {
right = mid - 1;
}
}
System.out.println(left);
}
}
P8647 [蓝桥杯 2017 省 AB] 分巧克力
最新推荐文章于 2024-07-12 16:26:30 发布