码迷,mamicode.com
首页 > 编程语言 > 详细

算法91----切绳子

时间:2019-03-16 15:34:42      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:包含   split()   整数   range   多少   一个   print   nbsp   for   

不能一、题目:切绳子

 有n根绳子,第i根绳子长度为Li,现在需要M根等长的绳子,你可以对n根绳子进行任意裁剪(不能拼接),计算出这m根绳子最长的长度是多少。

输入:第一行2个正整数N,M,表示N根原始的绳子,和最终需要M根绳子数

第二行包含N 个整数,第i个整数Li表示第i根绳子的长度

其中,1≤N、M≤100000,0 <Li<1000000000

输出一个数字,表示裁剪后最长的长度,保留两位小数。

输入:

3 4

3 5 4

输出:

2.5

 

二、思路:

  在绳子长度中进行二分查找最长的长度,然后计算能切出来的绳子根数总和,如果能达到则返回结果。

三、代码

def cut(L,n,m):
    sumN = 0
    for i in range(n):
        sumN += L[i]
    if sumN < m:
        print(0)
        return False
    if n >= m:
        print(L[0])
  #l为最大长度/m,u为所有长度和/m。 l , u
= max(L)/m , sumN(L)/m while round(l,3) < round(u,3): mid = (l + u ) / 2 sumN = 0 for i in range(n): sumN += L[i] // mid if sumN < m: u = mid else: l = mid print(round(l,2)) return True n , m = input().split() n , m = int(n) , int(m) L = list(map(int,input().split())) cut(L,n,m)

 

算法91----切绳子

标签:包含   split()   整数   range   多少   一个   print   nbsp   for   

原文地址:https://www.cnblogs.com/Lee-yl/p/10542404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!