分割电缆
来源:互联网 发布:淘宝旗下99 编辑:程序博客网 时间:2024/06/10 15:19
分割电缆
2010/05/15 下午 07:31
题目
输入:第一行是两个整数N和K,用一个空格隔开,其中N (1 = N = 10000)表示电缆的条数,K (1 = K = 10000)表示最终所需要的电缆根数。在接下来的N行里分别表示N条电缆的长度,范围从1米到100公里。所有的长度都精确到厘米,即小数点后两位。
输出:每根电缆的最大长度,单位为米,精确到小数点后两位。如果不能满足要求(即每根的长度还不到1厘米),就输出0.00。
解题思路
此题明显是二分法,考虑到解题需要,一律把单位换算成厘米,最小的从1cm开始,最大的是最长的电缆长度值。然后通过二分查找来找到合适的解,条件就是left>=right的时候,并且得到的电缆数目要大于等于需要的数目。这题中唯一要注意的是精度,Robot13之所以两个保密用例没有过,估计就是这个原因。
a[i]=(int)100*(a[i]+1e-8);printf("%.2lf\n",(double)left/100);
把精度注意好了,此题就能AC了
#include<iostream>#include<cstdio>using namespace std;int main(){int n,m;double a[10002];cin>>n>>m;int max=0;for (int i=1;i<=n;i++){ cin>>a[i]; a[i]=(int)100*(a[i]+1e-8); if(max<a[i]) max=a[i]; }int left=1;int right=max;int mid;float upset;int temp;while (left < right) { mid = (left + right) / 2+1; temp=0; for(int i=1;i<=n;i++) temp+=(int)a[i]/mid; if (temp < m) right = mid-1; else left = mid ; } if (temp >= m) { printf("%.2lf\n",(double)left/100); } else cout<<"0.00"<<endl; return 0;}
- 分割电缆
- 电缆分割问题(二分查找的应用)
- 电缆
- 低烟无卤电缆
- 电缆建设
- 打印头电缆断线故障
- 什么是编码电缆?
- 电缆屏蔽层接地
- 通信电缆色谱线序表
- 交叉电缆与同轴电缆
- 以太网电缆的连接
- 电缆线材命名2010
- 电缆,音频电缆,BNC电缆,摄像机电缆,闭路电视线,专业音响线材
- 电缆的特性阻抗
- 矿物质绝缘电缆型号
- NOIp模拟 电缆建设
- jzoj1405 电缆建设
- 【JZOJ 1405】电缆建设
- 图的广度优先遍历
- css+div笔记
- 折半查找
- 磁盘备份的虚拟磁带库
- 分治法求第k小元素
- 分割电缆
- 货币系统
- ASP.NET 三层架构
- 子集和
- JMF摄像语言
- 能被15整除的最大整数
- Asp.net文件下载问题
- 家谱
- 深入理解linux内核自旋锁