题目链接:切割钢管
题目思路:从给定的范围开始二分,用for循环,判断每一个长度中有几个mid,如果加起来的和>=k,则l增大,否则,r变小。
(对于此题还是模模糊糊,想不太通顺,但也只能先这么做)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, k;
cin >> n >> k;
int a[19949];
for(int i = 0; i < n; i++){
cin >> a[i];
}
int l = 1;
int r = 100000000;
while(l <= r){
int cnt = 0;
int mid = (l + r)/2;
for(int i = 0; i < n; i++)
cnt += a[i]/mid;
if(cnt >= k)l = mid+1;
else r = mid-1;
}
cout << r;
return 0;
}