https://ac.nowcoder.com/acm/problem/23049

题意:被给予n根木棍,华华需要k根,华华可以将每根木棍裁剪成若干段自己想要的长度,并丢掉多余的部分,华华不知道裁剪成多长比较好,所以干脆越长越好。不过由于华华有点强迫症,所以他希望长度为非负整数。

思路:二分寻找长度

代码

#include<bits/stdc++.h>

using namespace std;
#define ll long long
#define inf 1000000007

int a[200005];
int n, k;

int fun(int z)
{
    ll s=0;
    for(int i=0;i<n;i++)
    {
        s=s+a[i]/z;
    }
    if(s>=k)
    {
        return 1;
    }
    return 0;
}

int erfen(int l,int r)
{
    while(r-l>1)
    {
        int z=(l+r)/2;
        if(fun(z))
        {
            l=z;
        }
        else
        {
            r=z;
        }
    }
    return l;
}

int main()
{
    scanf("%d %d",&n,&k);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    int z=erfen(0,1000000001);
    printf("%d\n",z);
    return 0;
}