二分
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, k;
pair<int, int> a[N];
int maxnum = -1;
int main()
{
cin >> n >> k;
for (int i = 0; i < n; i++) {
int c, b;
cin >> c >> b;
maxnum = max(maxnum, c);
maxnum = max(maxnum, b);
a[i] = make_pair(c, b);
}
int l = 0, r = maxnum;
while (l < r) {
//本题求最大值 属于红色部分
//采用第一二分法
int mid = l + r + 1 >> 1;
int sum = 0;
for (int i = 0; i < n; i++) {
int n1, n2;
n1 = a[i].first / mid;
n2 = a[i].second / mid;
sum += n1 * n2;
}
//符合条件时
if (sum >=k) {
l= mid;
}
//不符合条件时
else r = mid -1;
}
cout << l << endl;
system("PAUSE");
return 0;
}