您的位置:首页 > 其它

PKU 1064 Cable master

2013-08-22 18:41 211 查看
题目链接:点击打开链接

有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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: