99分巧克力
⭐️难度:中等
🌟考点:二分
2017省赛真题
📖
📚
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] h = new int[100010];
int[] w = new int[100010];
for (int i = 1; i <= n; i++) {
h[i] = sc.nextInt();
w[i] = sc.nextInt();
}
// 所切最大边长和最小边长
int l = 1;
int r = 10000;
while(l < r){
int mid = (l + r + 1) / 2;
if(check(mid,n,h,w,k)){
l = mid;
}else{
r = mid -1;
}
}
System.out.println(l);
}
static boolean check(int x,int n,int[] h,int[] w,int k){
long ans = 0;
for (int i = 1; i <= n; i++) {
ans = ans + (h[i] / x) * (w[i] / x);
if(ans >= k){
return true; // 够分,return true
}
}
return false;
}
}
🍎笔记
可以看出随着巧克力边长的变小,巧克力分出来的数量越多,因此是一个递减函数。具有单调性。可以利用二分。