第十六届蓝桥杯康复训练--8
题目链接:1227. 分巧克力 - AcWing题库
思路:二分答案,每次二分边长
代码:
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
#define N 100010
int n,k;
PII a[N];
bool check(int mid){
int cnt=0;
for(int i=1;i<=n;i++){
if(a[i].first<mid||a[i].second<mid)continue;
cnt+=(a[i].first/mid)*(a[i].second/mid);
}
if(cnt>=k)return true;
return false;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i].first>>a[i].second;
int l=1,r=N;
while(l<=r){
int mid=l+r>>1;
if(check(mid))l=mid+1;
else r=mid-1;
}
cout<<r<<endl;
return 0;
}