給你n段線的長度,現在要你從他們上面切下k段來(切下的不能合併),使得這k段長度相等,並且最大。如若求出的答案小於0.01,則認為無解,輸出0.00。(所有非整數都精確到了兩位,輸出亦然)1<=n,k<=10000
(每條線段的長度都是在1到100000之間的實數)
二分查詢,一般用於最小值的最大值,最大值的最小值,或暴力找答案
二分查詢的最終答案要根據題目來確定,有時候是單獨儲存下來的最後乙個mid,有時候是l或r
而這道題很顯然要用二分,那就不難了
為了計算方便,我們把小數換成整數計算
時間複雜度(n log n)
var
n,k,i,l,r,m:longint;
j:int64;
a:array[1..10000]of longint;
c:real;
function
ssl(m:longint):boolean;
var i,j:longint;
begin
j:=0;
for i:=1
to n do
j:=j+a[i] div m;
if j>=k then
exit(true) else
exit(false);
end;
begin
assign(input,'a.in');
assign(output,'a.out');
reset(input);rewrite(output);
readln(n,k);
for i:=1
to n do
begin
readln(c);
a[i]:=round(c*100);
j:=j+a[i];
if a[i]>r then r:=a[i];
end;
l:=1;
if j div kthen r:=j div k;
i:=0;
while ldo
begin
m:=(l+r) div
2; if ssl(m) then
begin i:=m;l:=m+1;end
else r:=m;
end;
if ssl(l) then i:=l;
c:=i/100;
writeln(c:0:2);
close(input);close(output);
end.
遊老師模擬賽5 27
1.tower 題目描述 平面上有n個整點。如果將點 x0,y0 移動到 x1,y1 則需要的代價為 x0 x1 y0 y1 求使得k k 1 n 個點在同一位置上最少需要的代價。輸入檔案 第一行1個正整數n 接下來n行,每行兩個正整數xi和yi,為第i個點的座標,不超過106。輸出檔案 輸出共n行...
解密模擬題
現有加密二進位制檔案乙份,按規則進行解碼 a.轉碼後檔案由0x1b,0x4c開頭 b.跳過原始檔前六個位元組,每兩個位元組為乙個迴圈節 c.獲取初始key,由md5 hello 檔名 的前8位構成 d.對初始key進行如下操作 高4位 0x41a70000 0x7fff0000 低4位 0x41a7...
模擬題總結
1 模擬題的常見題型 1 打表,列出所有可能 資料較少,規律明顯 2 分階段求解,自頂向下,先寫出主程式,然後輸入輸出,判斷條件這些直接用函式實現,簡化步驟。3 模擬操作,有兩種思路,一是直接模擬,得出結果 二是先記錄所有操作,然後模擬每個操作。4 日期天數,可以逐年,逐月,逐日的相加,然後求星期之...