04:网线主管http://www.noi.openjudge.cn/

83 篇文章 2 订阅
10 篇文章 0 订阅

04:网线主管

总时间限制: 

1000ms

内存限制: 

65536kB

描述

仙境的居民们决定举办一场程序设计区域赛。裁判委员会完全由自愿组成,他们承诺要组织一次史上最公正的比赛。他们决定将选手的电脑用星形拓扑结构连接在一起,即将它们全部连到一个单一的中心服务器。为了组织这个完全公正的比赛,裁判委员会主席提出要将所有选手的电脑等距离地围绕在服务器周围放置。

为购买网线,裁判委员会联系了当地的一个网络解决方案提供商,要求能够提供一定数量的等长网线。裁判委员会希望网线越长越好,这样选手们之间的距离可以尽可能远一些。

该公司的网线主管承接了这个任务。他知道库存中每条网线的长度(精确到厘米),并且只要告诉他所需的网线长度(精确到厘米),他都能够完成对网线的切割工作。但是,这次,所需的网线长度并不知道,这让网线主管不知所措。

你需要编写一个程序,帮助网线主管确定一个最长的网线长度,并且按此长度对库存中的网线进行切割,能够得到指定数量的网线。

输入

第一行包含两个整数N和K,以单个空格隔开。N(1 <= N <= 10000)是库存中的网线数,K(1 <= K <= 10000)是需要的网线数量。
接下来N行,每行一个数,为库存中每条网线的长度(单位:米)。所有网线的长度至少1m,至多100km。输入中的所有长度都精确到厘米,即保留到小数点后两位。

输出

网线主管能够从库存的网线中切出指定数量的网线的最长长度(单位:米)。必须精确到厘米,即保留到小数点后两位。
若无法得到长度至少为1cm的指定数量的网线,则必须输出“0.00”(不包含引号)。

样例输入

4 11
8.02
7.43
4.57
5.39

样例输出

2.00

来源

Northeastern Europe 2001

  • 查看
  • 提交
  • 统计
  • 提问
    #include<iostream>
    using namespace std;
    long long n,k;
    long long len[10005];
    bool check(long long x){//判断该长度能不能裁成k段网线
    	if(x==0)//分母不能为0
    	return false;
    	long long num=0;
    	
    	for(int i=0;i<n;i++){//每小段网线能裁成的网线加起来
    		num+=len[i]/x;
    	}
    	
    	if(num>=k)
    	return true;
    	else
    	return false;
    }
    int main(){
    	cin>>n>>k;
    
    	long long max=-1;
    	for(long long i=0;i<n;i++){
    		double x;
    		cin>>x;
    		len[i]=x*100;
    		if(len[i]>max)
    		max=len[i];
    	}
    	
    	long long left=0;//二分查找左端
    	long long right=max;//二分查找右端
    	long long mid,lastmid;
    	lastmid=0;
    	while(left<=right){
    		mid=left+(right-left)/2;
    		
    		if(check(mid)){
    			lastmid=mid;//上一个满足条件的长度
    			left=mid+1;//如果该长度满足条件,记录下该长度(放到lastmid中),继续增加长度
    		}else{
    			right=mid-1;//否则说明长度太长了,需要剪短长度才能剪成相应的段数
    		}
    	}
    	
    	printf("%.2lf",lastmid/100.00);
    	
    	return 0;
    }
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值