5.6
[蓝桥杯 2017 省 AB] 分巧克力
边长越大,能分到的数量越少。
所以可以二分答案。
// 对于边长为x的巧克力,能分出(h/x)*(w/x)块,而不是(h*w)/(x*x)块(除是整除!!)。。
因为边长有限制 而不是可以拉伸可以看面积(比如3x1000最多分出500块2x2的而不是750块)。
所以我第一次写的check函数就有问题(这样写依据了分法二)。。 //
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct choc{ //用a[],b[]两个数组存也行
int h;
int w;
} q[100010];
int n,k;
/*bool check(int x){ //我第一次写的check函数
int s=0;
for(int i=0;i<n;i++)
s+=q[i].h*q[i].w;
return x*x*k<=s;
}*/
bool check(int x){
int s=0;
for(int i=0;i<n;i++)
s+=(q[i].h/x)/(q[i].w/x); //小学数学。。
return s>=k;
}
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>q[i].h>>q[i].w;
int l=1,r=100000;
while(l+1<r){
int mid=(l+r)/2;
if(check(mid))
l=mid;
else
r=mid;
}
cout<<l;
return 0;
}