二分答案,假设当前木棍长度为 ,那么初始每根木棍可以获得
根木棍,检查
是否成立即可,代码如下:
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;
}

京公网安备 11010502036488号