#include
#define objl '\n'
typedef long long ll;
using namespace std;
//数据结构在这里定义
const int N = 1e5 + 10;
int n,k;
int H[N];
int W[N];//第i块巧克力的数据
int maxn = 0;//最大的一块巧克力边长,它作为初始的r
bool check(ll x){
int sum = 0;
for(int i = 1; i<=n;i++){
//逐个切巧克力
sum = sum + (H[i]/x)*(W[i]/x);
}
if(sum >= k){
return true;
}else{
return false;
}
}
//要找边长的最大值也就是右边界
void bs(){
ll l = 1, r = maxn;
ll ans = 1;
while(l<=r){
//左闭右闭
ll mid = l + (r - l) / 2;
//排除 [mid, right]
if(check(mid)==false){
//说明边长太大,块数不够给小朋友
//mid以及mid以后的边长一定不满足条件
r = mid - 1;
//mid是解区间内的一个值
}else if(check(mid)==true){//满足条件就记录一个答案,直到找不到为止
//可能Mid就是我要找的最大值 当l=mid+1后
//l-r之间再也找不到了
ans = mid;
l = mid + 1;
}
}
cout << ans << endl;
}
void solve(){
cin >> n >> k;
for(int i =1;i <= n;i++){
cin >> H[i] >> W[i];
if(H[i] > maxn){
maxn = H[i];//作为r值
}
if(W[i] > maxn){
maxn = W[i];
}
}
bs();
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;//多组数据要cin
//cin >> t;
t = 1;
while(t--){
solve();
}
return 0;//必须加return 0
}
0 回复
0 转发
0 喜欢
5 阅读



