题目:P8647 [蓝桥杯 2017 省 AB] 分巧克力 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目要求,求解最大正方形巧克力边长。
题目分析:考虑枚举会超时,我们采用二分,每块巧克力可分出的数量:H/mid*W/mid 如果得数小于小朋友数(不够分),就往左区间继续尝试(缩小边长),直到大于等于 k 是ture了
#include<iostream>
using namespace std;
int n,k,a[100005],b[100005];
bool check(int x){
int num=0;
for(int i=0;i<n;i++){
num+=(a[i]/x)*(b[i]/x);
}
return num>=k;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i]>>b[i];
}
// int le=1,r=100000;
int le=1,r=n;
while(le<r){
//int mid=(le+r+1)>>1;
int mid=(le+r+1)/2;
if(check(mid)) le=mid;
else r=mid-1;
}
cout<<le;
}