AcWing寒假每日一題 Day6剪繩子

2021-10-14 18:21:22 字數 1659 閱讀 6141

有n

nn根繩子,第i根繩子長度為lili

li,現在需要m

mm根等長的繩子,你可以對n

nn根繩子進行任意裁剪(不能拼接),請你幫忙計算出這m

mm根繩子最長的長度是多少。

輸入格式

第一行包含2

22個正整數n、m

n、mn、

m,表示原始繩子的數量和需求繩子的數量。

第二行包含n

nn個整數,其中第 i

ii 個整數lili

li表示第 i

ii 根繩子的長度。

輸出格式

輸出乙個數字,表示裁剪後最長的長度,保留兩位小數。

資料範圍

1 ≤n

,m

≤100000

,1≤n,m≤100000,

1≤n,m≤

1000

00,0

<10

90

0<10

9輸入樣例:

3334

443335

554

44

輸出樣例:

2.50

2.50

2.50

樣例解釋

第一根和第三根分別裁剪出一根2.50

2.50

2.50

長度的繩子,第二根剪成2

22根2.50

2.50

2.50

長度的繩子,剛好4

44根。

分析:

這是一道二分題,可以直接二分搜尋繩子的長度,這是乙個浮點數二分模板。為什麼能想到二分搜尋呢?如果我們找到乙個長度len

lenle

n,使得m=∑

i=0n

⌊a[i

]len

⌋m=\sum_^ \left \lfloor \frac \right \rfloor

m=∑i=0

n​⌊l

ena[

i]​⌋

,那麼小於len

lenle

n的長度都滿足上面的式子,符合二分的性質。

接下來就直接套浮點數二分的模板了:

#include.h>

using namespace std;

const int n=

1e6+5;

int a[n]

,m,n;

bool check

(double len)

if(res>=m)

return

true

;else

return

false;}

int main()

double l=

0,r=

1e9;

while

(r-l>

1e-3

)printf

("%.2lf\n"

,l);

}

acwing寒假每日一題題解

貨倉選址 頭兩天的每日一題有點水 include using namespace std int s 505 505 int i,j intmain void 語法題蛇形添數 輸入兩個整數n和m,輸出乙個n行m列的矩陣,將數字 1 到 n m 按照回字蛇形填充至矩陣中。具體矩陣形式可參考樣例。輸入格...

acwing 寒假每日一題題解

本篇部落格是基於acwing活動中的寒假每日一題 活動位址 在一條數軸上有 n 家商店,它們的座標分別為 a1 an。現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。輸入格式 第一行輸入整數n。第二行n個...

AcWing寒假每日一題 Day9獎學金

某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,每個學生都有3門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學排在前面,這樣,每個學生的排序是唯一確定的。任...