【蓝桥杯】1227.分巧克力(二分)
https://www.acwing.com/problem/content/description/1229/
题目大意:
有K个小朋友吃巧克力,每个人都想要正方形的巧克力
一共有n块奇形怪状的巧克力
问问可以切出来的最大的边长是多少?
输入样例:
2 10
6 5
5 6
输出样例:
2
太久没写二分了,板子都丢了,麻
边界不能越界,所以用这个判断mid比较保险
int mid=(l+r+1)>>1;
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=200200,M=2002;
int n,k;
int w[N],h[N];
bool check(int x)
{
int num=0;
for(int i=1;i<=n;i++)
{
num+=(w[i]/x)*(h[i]/x);
if(num>=k) return true;
}
return false;
}
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>h[i];
}
int l=1,r=1e5;
while(l<r)
{
int mid=(l+r+1)>>1;
//int mid=l+(r-l+1)/2;
if(check(mid)) l=mid;//这里也可以的话就以它为下限
else r=mid-1;//如果不行的话,默认上限就在它的下一个
//cout<<l<<" "<<r<<endl;
}
cout<<r<<endl;
return 0;
}