木材加工
2025-07-27 08:57:22
发布于:上海
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 100005;
int n, k, a[N];// n-丝带卷数,k-需求段数,a-丝带长度数组
bool check(int x) {
long long cnt=0;
for(int i=1;i<=n;i++){
cnt+=a[i]/x;
}
return cnt >= k;
}
int upper_answer(int l, int r){
int ans = 0;
while(l <= r) {
int mid = (l + r) / 2;
if(check(mid)){
ans = mid;
l = mid + 1;
}else{
r=mid-1;
}
}
return ans;
}
int main() {
cin >> n >> k;
int maxn=0; // 丝带最大长度
for(int i=1; i<=n; i++) {
cin >> a[i];
maxn=max(maxn,a[i]);
}
long long l =1, r =maxn;
cout<<upper_answer(l,r);
return 0;
}
这里空空如也
有帮助,赞一个