hdu 1551(二分)
2016-02-25 23:16
381 查看
Cable master
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2919 Accepted Submission(s): 1099
[align=left]Problem Description[/align]
Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunteered and has promised to organize the most honest contest ever. It was decided to connect
computers for the contestants using a "star" topology - i.e. connect them all to a single central hub. To organize a truly honest contest, the Head of the Judging Committee has decreed to place all contestants evenly around the hub on an equal distance from
it.
To buy network cables, the Judging Committee has contacted a local network solutions provider with a request to sell for them a specified number of cables with equal lengths. The Judging Committee wants the cables to be as long as possible to sit contestants
as far from each other as possible.
The Cable Master of the company was assigned to the task. He knows the length of each cable in the stock up to a centimeter, and he can cut them with a centimeter precision being told the length of the pieces he must cut. However, this time, the length is not
known and the Cable Master is completely puzzled.
You are to help the Cable Master, by writing a program that will determine the maximal possible length of a cable piece that can be cut from the cables in the stock, to get the specified number of pieces.
[align=left]Input[/align]
The input consists of several testcases. The first line of each testcase contains two integer numbers N and K, separated by a space. N (1 ≤ N ≤ 10000) is the number of cables in the stock, and K (1 ≤ K
≤ 10000) is the number of requested pieces. The first line is followed by N lines with one number per line, that specify the length of each cable in the stock in meters. All cables are at least 1 centimeter and at most 100 kilometers in length. All lengths
in the input are written with a centimeter precision, with exactly two digits after a decimal point.
The input is ended by line containing two 0's.
[align=left]Output[/align]
For each testcase write to the output the maximal length (in meters) of the pieces that Cable Master may cut from the cables in the stock to get the requested number of pieces. The number must be written
with a centimeter precision, with exactly two digits after a decimal point.
If it is not possible to cut the requested number of pieces each one being at least one centimeter long, then the output must contain the single number "0.00" (without quotes).
[align=left]Sample Input[/align]
4 11 8.02 7.43 4.57 5.39 0 0
[align=left]Sample Output[/align]
2.00
这题由于精度问题两种做法:
第一种,转化成整数做
#include <iostream> #include <cstdio> #include <cmath> #include <iomanip> using namespace std; int main() { int N,K,i,sum1=0; scanf("%d %d",&N,&K); double cable[10005]; int cable2[10005],max=-1; for(i=0;i<N;i++) { scanf("%lf",&cable[i]); cable2[i] = cable[i] * 100; if(cable2[i]>max)max=cable2[i]; } int l = 1, r = max, mid; while(r >= l) { sum1=0; mid = (l + r) / 2; for(i = 0; i < N; i++) { sum1 += floor(cable2[i] / mid); } if(sum1 < K) { r = mid - 1; } else { l = mid + 1; } } mid = (l + r) / 2; printf("%.2f\n",(double)mid / 100); return 0; }
第二种,直接用小数做,只是后面注意精度的处理
#include <iostream> #include <cstdio> #include <cmath> #include <iomanip> using namespace std; int main() { int N,K,i,sum1=0; scanf("%d %d",&N,&K); double cable[10005],max=-1.0; for(i=0;i<N;i++) { scanf("%lf",&cable[i]); if(cable[i]>max)max=cable[i]; } double l=0,r=max,mid; while(r-l>0.001) { sum1=0; mid=(l+r)/2.0; for(i=0;i<N;i++) { sum1+=floor(cable[i]/mid); } if(sum1<K) { r=mid; } else { l=mid; } } int ans=r*100; //if((double)ans/100-0.01<0)printf("0.00\n");//这句话可以不要,看看题目给的范围就知道了,不会出现这种情况。。所以题目的范围还是很重要的啊 printf("%.2f\n",(double)ans / 100); return 0; }
相关文章推荐
- UESTC 360 Another LCIS 线段树
- UVA 712(p176)----S-Trees
- 【每日算法】哈希表(Hash Table)
- 几种TCP连接中出现RST的情况
- PL/SQL之复合类型详解
- 调查问卷
- 宏定义 button 方法 --备
- MFC绘制动态曲线,用双缓冲绘图技术防闪烁
- UI进阶第六天,绘制图形
- 国内版office365 Sharepoint Online的空间扩容到1TB啦~~~
- Self Crossing
- ios打乱数组顺序
- 使用Eclipse+NDK编译arm64-v8a CPU架构的speex.so文件
- vector中erase用法注意事项
- UVA 699(p159)----The Falling Leaves
- debug 输出 以及宏定义--备
- 如何用MFC在窗口中绘制曲线
- Sublime Text 3 安装、汉化、插件步骤详谈
- 数学背景知识课程笔记
- Matlab连接Sql server数据库