【每日一题】华华给月月准备礼物
华华给月月准备礼物
https://ac.nowcoder.com/acm/problem/23049
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"; }