华华给月月准备礼物
华华给月月准备礼物
https://ac.nowcoder.com/acm/problem/23049
题意
有N个给定长度的木棍,华华想得到K条长度(L)相同的木棍(给定的木棍可裁剪),最大化L。
思路
容易想到可以二分长度,对于每个长度,暴力check一下能不能裁成大于等于K条木棍。
复杂度
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
int n, k;
int a[maxn];
bool check(int x){
int ans = 0;
for(int i = 0; i < n; i++){
ans += a[i] / x;
if(ans >= k)
return 1;
}
return 0;
}
int main()
{
int l = 0, r = 0;
cin >> n >> k;
for(int i = 0; i < n; i++){
cin >> a[i];
r = max(r, a[i]);
}
while(l < r){
int mid = (l + r + 1) >> 1;
if(check(mid)) l = mid;
else r = mid - 1;
}
cout << l << endl;
return 0;
}
查看13道真题和解析