hdu 1551 Cable master(二分法)

来源:互联网 发布:小米手环抢购软件 编辑:程序博客网 时间:2024/05/29 17:56

原题链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1551


题目大意:

N个电缆,均分成K份。

问每份最长为多少。



思路:

求出总长度,总长度/K即每份最大值,然后与0开始二分,直到找到能分成K份的最大值。


代码如下:

#include<iostream>#include<cmath>using namespace std;const int MAXN = 10000 + 10;double cable[MAXN];int main(){int N, K;while (scanf("%d%d",&N,&K)&&(N+K)){double right = 0;for (int i = 0; i < N; i++){scanf("%lf", &cable[i]);right += cable[i];}right /= K;double left = 0, mid, ans = 0;while (abs(right - left)>0.001)//题目要求保留两位小数,所以算到第三位{int sum = 0;mid = (left + right) / 2;for (int i = 0; i < N; i++){sum += floor(cable[i] / mid);//向下取整。}if (sum<K)right = mid;else left = mid;if (sum == K&&ans < mid)ans = mid;}printf("%.2lf\n",ans);}return 0;}


0 0
原创粉丝点击