原題鏈結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得到每個地方可以簽收的時間段,並且也知道路線...