
- #include
- using namespace std;
-
- const int N =1e5 + 10;
- int h[N] = {0},w[N] = {0};
- int n,k;
-
- bool check(int mid){
- int ans = 0; // ans 统计蛋糕以mid为边长 可以划分的数量
- for(int i = 0;i < n;i++){
- ans += (h[i] / mid) * (w[i] / mid);
- if(ans >= k) return true;
- }
- return false;
- }
-
- int main(){
- ios::sync_with_stdio(0),cin.tie(0);
- cin >> n >> k;
- for(int i = 0;i < n;i++) cin >> h[i] >> w[i];
- int l = 1,r = 1e5; // 蛋糕最大的边长为右边界
- while(l < r){
- int mid = l + r + 1 >> 1;
- if(check(mid)) l = mid; // 如果mid可以满足 还可以增加
- else r = mid - 1;
- }
- cout << l << endl;
- return 0;
- }