Luogu P1542 包裹快遞

2022-08-21 09:03:08 字數 1273 閱讀 2478

原題鏈結qwq

本題要求我們求出車的最大速度最小值

像求最大值最小最小值最大這種型別的題目,我們很自然地就能想

到用二分答案(一般情況)來求解。

做二分題目時,我們要弄清楚這樣幾點:

二分什麼

如何判斷是否可行 ( 即check函式的內容 )

當二分到乙個滿足條件的解時,\(l\) , \(r\) 該如何移動

針對以上三個問題,我們來一步一步解決。

\(s1.\) 題目求速度,所以我們可以直接二分最大速度的值

\(s2.\) 在check函式中可以直接進行模擬送包裹,在模擬過程當中進行

判斷(具體見**)

\(s3.\) 可能我們做二分題目會形成了思維定式,例如求最 大/小 值解的時

候,若 \(mid\) 滿足題意,則就將 \(l = mid + 1\) 或將 $r = mid - 1 $

然而,由於此題考慮到精度問題,如果按照上述操作,那麼我們就會

錯過 \(1 / 0.01 = 100\)(及以上)個可能滿足條件的解 (保留兩位小

數)。所以正確的格式應是:

mid = (l + r) / 2;

if (check(mid)) res = mid, r = mid;

else l = mid;

另外,由於本題資料原因對精度要求較高,所以在定義實數型別時要

long double,相與之搭配的輸出應是printf("%lf").

到此為止,問題都已經解決。

下面給出樸實**

#include #define ll long long

#define inf 0x3f3f3f3f

const int maxn = 2e5 + 100;

using namespace std;

int x[maxn], y[maxn], s[maxn];

int n;

long double res;

inline bool check(double k)

return true; //若至始至終沒有遲到,則說明以此速度的方案可行

}int main()

printf("%0.2lf\n", res); //保留兩位小數

return 0;

}

希望此題解能讓泥萌有所收穫

洛谷 P1542 包裹快遞

一看到最小的最大就能知道是二分啦 對於這道題,我們要二分的值肯定是可以知道的 行駛速度,因為求的是速度,而邊界條件就為 0 和最大的速度也就是路程總和了,對於精度,一般開在題目要求的精度上加 4 就行。cheak 函式當然就是看以這個速度行走,能否到達終點即可。注意 題目雖然是說每一次的速度可以不一...

洛谷 P1542 包裹快遞

小k成功地破解了密文。但是乘車到x國的時候,發現錢包被偷了,於是無奈之下只好作快遞員來攢足路費去orz教主 乙個快遞公司要將n個包裹分別送到n個地方,並分配給郵遞員小k乙個事先設定好的路線,小k需要開車按照路線給的地點順序相繼送達,且不能遺漏乙個地點。小k得到每個地方可以簽收的時間段,並且也知道路線...

洛谷 1542 快遞包裹

小k成功地破解了密文。但是乘車到x國的時候,發現錢包被偷了,於是無奈之下只好作快遞員來攢足路費去orz教主 乙個快遞公司要將n個包裹分別送到n個地方,並分配給郵遞員小k乙個事先設定好的路線,小k需要開車按照路線給的地點順序相繼送達,且不能遺漏乙個地點。小k得到每個地方可以簽收的時間段,並且也知道路線...