这道题的考点:二分.
这道题由于 较大,考虑二分答案的方法。
我们已知答案为 ,一直二分下去,每次都判断切边长为 的正方形数是否满足要求。
如何求出边长为 的正方形数呢?
对于第 个巧克力,它边长为 的正方形数为 ,只要判断这个结果是否大于 即可。
标程在这里:
#include<bits/stdc++.h>
using namespace std;
int n,k,h[100050],w[100050],mid;
int main()
{
cin >> n >> k;
for(int i = 1;i <= n;i++) cin >> h[i] >> w[i];
int l = 1,r = 100000,ans;
while(l < r){//二分
ans = 0;
mid = (l+r+1)/2;
for(int i = 1;i<=n;i++)
ans += (h[i]/mid)*(w[i]/mid);//正方形个数
if(ans >= k) l = mid;
else r = mid-1;
}
cout << l;
return 0;
}