P2440 木材加工 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
一道二分答案题
首先我们输入 n 和 k 并且运用二分找到合适的尺寸,而l 必须要足够小,r 必须要足够的大。题中写道数组中的数最大不会超过 100000000 ,所以我们设 100000001 就可以了。
现在就走到了判断的环节,我们如何判断 mid 是太小还是太大呢?我们要用所以的木条长度除以mid在与k判断大小
#include<iostream> #include<algorithm> using namespace std; int n,k; int a[100007]; int main() { cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; int l=0,r=1e8+1,m; while(l+1<r) { m=(l+r)/2; int cnt=0; for(int i=1;i<=n;i++) cnt+=a[i]/m; if(cnt>=k)l=m; else r=m; } cout<<l<<endl; return 0; }