PKU 1064 Cable master

时间:2023-03-10 07:12:53
PKU 1064 Cable master

题目链接:点击打开链接

有n段绳子,给定n段绳子的长度,单位为厘米。求能够把这些绳子分成k段的最长的段的长度。题目中的trick是最小是1cm,长度不能小于1cm,因此要转换成int来解,然后二分可以截得的绳子的长度。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
#define INF 100000000
int l[10009];
int n, k;
bool C(int len)
{
if (len == 0) return false;
int sum = 0;
for (int i=0; i<n; i++)
{
sum += (int)(l[i] / len);
}
if (sum >= k) return true;
return false;
} int main()
{
cout.precision(2);
while ( cin >> n >> k )
{
double x;
for (int i=0; i<n; i++) { cin >> x; l[i] = x * 100; }
int low = 0, up = INF;
for (int i=0; i<100; i++)
{
int mid = (low + up) / 2;
if (C(mid)) low = mid;
else up = mid;
}
if (low < 1) puts("0.00");
else cout << fixed << low * 1.0 / 100 << endl;
}
return 0;
}