百練 1064 網線主管

2021-09-27 01:23:02 字數 1497 閱讀 4344

描述

仙境的居民們決定舉辦一場程式設計區域賽。裁判委員會完全由自願組成,他們承諾要組織一次史上最公正的比賽。他們決定將選手的電腦用星形拓撲結構連線在一起,即將它們全部連到乙個單一的中心伺服器。為了組織這個完全公正的比賽,裁判委員會主席提出要將所有選手的電腦等距離地圍繞在伺服器周圍放置。

為購買網線,裁判委員會聯絡了當地的乙個網路解決方案提供商,要求能夠提供一定數量的等長網線。裁判委員會希望網線越長越好,這樣選手們之間的距離可以盡可能遠一些。

該公司的網線主管承接了這個任務。他知道庫存中每條網線的長度(精確到厘公尺),並且只要告訴他所需的網線長度(精確到厘公尺),他都能夠完成對網線的切割工作。但是,這次,所需的網線長度並不知道,這讓網線主管不知所措。

你需要編寫乙個程式,幫助網線主管確定乙個最長的網線長度,並且按此長度對庫存中的網線進行切割,能夠得到指定數量的網線。

輸入第一行包含兩個整數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
m, n =

map(

int,

input()

.split())

s =[

]max_len =

0for i in

range(0

, m)

:int

(float

(input()

)*100)

)if max_len < s[i]

: max_len = s[i]

# 網線長度的取值範圍

l =0

r = max_len +

1while r - l >1:

w =0 mid =

(l + r)//2

# 必須是整除,否則wa

for i in

range

(m):

w += s[i]

// mid

if w >= n:

# 得到的網線數多了

l = mid # 增加網線長度

else

:# 得到的網線數少了

r = mid # 減少網線長度

l =format

(l /

100,

".2f"

)print

(l)

POJ 1064 網線主管 二分搜尋

原題傳送門 有 n nn條繩子,它們的長度分別為 l il i li 如果從它們中切割出k kk條長度相同的繩子的話,這些繩子每條最長能有多長?答案保留到小數點後 2位 白書中所謂典型的二分搜尋題,左邊界從0開始,右邊界從所有繩子中最長的開始,每次統計 l r 2 l r 2 l r 2能切割出來多...

04 網線主管OJ

總時間限制 1000ms 記憶體限制 65536kb 描述 仙境的居民們決定舉辦一場程式設計區域賽。裁判委員會完全由自願組成,他們承諾要組織一次史上最公正的比賽。他們決定將選手的電腦用星形拓撲結構連線在一起,即將它們全部連到乙個單一的中心伺服器。為了組織這個完全公正的比賽,裁判委員會主席提出要將所有...

openjudge66 網線主管

時空限制 1000ms 64mb 仙境的居民們決定舉辦一場程式設計區域賽。裁判委員會完全由自願組成,他們承諾要組織一次史上最公正的比賽。他們決定將選手的電腦用星形拓撲結構連線在一起,即將它們全部連到乙個單一的中心伺服器。為了組織這個完全公正的比賽,裁判委員會主席提出要將所有選手的電腦等距離地圍繞在伺...