二分答案,假设当前木棍长度为 ,那么初始每根木棍可以获得 根木棍,检查 是否成立即可,代码如下:

using i64=long long;
void mktx()
{
    int n,k;
    cin>>n>>k;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    auto check=[&](int mid)->bool
    {
        i64 sum=0;
        for(int i=1;i<=n;i++) sum+=a[i]/mid;
        return sum>=k;
    };
    int l=0,r=*max_element(a.begin()+1,a.end());
    while(l<r)
    {
        int mid=(l+r+1)>>1;
        if(check(mid)) l=mid;
        else r=mid-1;
    }
    cout<<r;
}