1. 程式人生 > >算法91----切繩子

算法91----切繩子

+= split cut 查找 pan 最長 返回結果 其中 如果

不能一、題目:切繩子

有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----切繩子