有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門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學排在前面,這樣,每個學生的排序是唯一確定的。任...