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;
}

 

posted on 2022-08-21 07:59  ljq0120  阅读(22)  评论(0编辑  收藏  举报