二分查詢 切割問題

2021-10-12 21:09:48 字數 851 閱讀 9279

工地現有 n 根鋼管,第 i 根鋼管的長度為 a_i 。

現在想用這 n 根鋼管來做乙個支撐用的柱子。我麼可以切割這些鋼管成為更短的鋼管,但是不能縫合兩根鋼管。為了安全起見,柱子必須用 至少 k 根長度相同的鋼管加上混凝土製成,並且要求鋼管長度必須為 整數。

這個柱子最高能建成多高(鋼管可以有剩餘)。

輸入格式

輸入第一行乙個整數 n,k(1≤n,k≤10000)。

接下來一行輸入 n 個空格隔開的整數 l_i (1≤ l_i ≤10^8 ),表示每根鋼管的長度。

輸出格式

輸出最大的高度。

樣例輸入1複製

2 48 4

樣例輸出1複製

2樣例輸入2複製

8 812 3 14 12 14 20 4 8

樣例輸出2複製

7

#include

using

namespace std;

//想要分割出來的鋼管高度越高,那麼能分割出來的就越少

int a[

10005];

//把每根鋼管的長度存放起來

intmain()

int l =

0, r =

100000001

;//設起始最大高度為r 右邊界

while

(l < r)

if(cnt >= k)

else

} cout << r -

1<< endl;

//這裡輸出l-1或者r-1都可以,因為最後結果出來l與r是相等的

return0;

}

繩子切割 二分查詢

題目描述 有n條繩子,它們的長度為li li 1000 如果從它們中切割出k條長度相同的繩子的話,這條繩子每條最長能有多長?答案保留到小數點後2位。輸入輸入包含兩行,第一行有兩個整數n和k,n代表n條繩子,k代表切割出的長度。4 11 8 02 7.43 4.57 5.39 輸出輸出能切割出最長的長...

二分查詢 網線切割

二分查詢也稱折半查詢 binary search 它是一種效率非常高效的查詢方法。每次拿目標數值 以下用value表示 與陣列中間位置的資料 以下用arry mid 表示,mid表示陣列中間位置索引值 進行比較,如果value大於arry mid 繼續將value與大於arry mid 部分的中間位...

二分 木棒切割

問題 給出n根木棒,長度均已知,現在希望通過切割他們來得到至少k段長度相等的木棒 長度必須為整數 問這些長度相等的木棒最長有多長?這一題可以利用二分的思想來求解,最短是0 left 最長為最長木棒的長度 right 不斷對這個區間進行二分,且每次分完計算所能得到的木棒的條數,如果相同則返回,否則繼續...