原题
①这道题学到的大切小的方法很有用,要记住,
②二分的知识又增加了一些
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, k;
int h[N], w[N];
bool check(int mid){
int x = 0;//记录最终分得的巧克力数
for(int i = 1; i <= n; i ++ ){//遍历每块大巧克力
//这种切块方式很有用,可以记住
x += (h[i] / mid) * (w[i] / mid);//算出每块大巧克力能得出几块小巧克力
if(x >= k) return true;//如果当前得到的巧克力数已经大于k,代表这个边长的小巧克力可以
}
return false;
}
int main()
{
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i ++ ){
scanf("%d%d", &h[i], &w[i]);
}
int l = 1, r = 1e5;
while(l < r){
int mid = (l + r + 1) >> 1;//二分加一
if(check(mid)) l = mid;
else r = mid - 1;
}
cout<<r<<endl;
return 0;
}