分巧克力
题目 分巧克力
思路分析
先想能否二分 怎么二分 再想如何check
代码实现
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
const int N=1e5+10;
int H[N],W[N];
int n,k;
bool check(int mid){
int sum=0;
for(int i=1;i<=n;i++)
sum+=(H[i]/mid)*(W[i]/mid);
if(sum>=k)
return true;
return false;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>k;
int maxv=-1;
for(int i=1;i<=n;i++){
cin>>H[i]>>W[i];
maxv=max({maxv,H[i],W[i]});
}
int l=1,r=maxv;
while(l<r){
int mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<r<<endl;
return 0;
}
同类题型
视频讲解
⬅️ 农田灌溉 🏠 00-刷题理模型 ➡️ 分配给商店的最多商品的最小值
💬 评论