Solution
设为长度取
时,能得到的木棍数。
因为长度为的木棍最多能分成
根长度为
的木棍,
所以。
显然这个函数是单调下降的,所以可以二分找到最大的满足的
。
Code
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
cin.sync_with_stdio(false), cin.tie(nullptr);
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int low = 0, high = 1000000000;
while (low < high) {
int mid = (low + high + 1) / 2;
ll sum = 0;
for (int i = 0; i < n; i++) {
sum += a[i] / mid;
}
if (sum >= k) {
low = mid;
} else {
high = mid - 1;
}
}
cout << low << "\n";
} 
京公网安备 11010502036488号