算法91----切繩子
阿新 • • 發佈:2019-03-16
+= 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
二、思路:
在繩子長度中進行二分查找最長的長度,然後計算能切出來的繩子根數總和,如果能達到則返回結果。
三、代碼
defcut(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----切繩子