TIOJ 1284 賽車問題
Description
現在有 n 輛往右邊跑的賽車,每一輛都有其固定的車速以及起始位置。你是一位專業的攝影師,而你相信你的專業,順從你的渴望,你希望能夠抓準時機,一次把所有賽車通通照下來。
如果要把所有賽車通通照下來,那麼你的底片要夠長才行。
為了節省成本,你想要知道在所有時刻中,什麼時候最領先的車子跟最落後的車子的距離會最短。
手癢的你趕快來寫個程式求出最短距離吧!
Input Format
輸入的第一列有一個正整數 n (2≤n≤100,000)。
接下來有 n 列,每列有兩個整數 vi,si 依序代表第 i 輛賽車的車速(單位:公尺/秒)以及起始座標(向右為正,單位:公尺)。
(0≤vi,si≤1,000,000)
噢對了,所有車子都位於不同的賽道,因此你不必考慮它們追撞的情形,也不用考慮車身的長度。
而且你可以假設所有車子的車速都不相同。
Output Format
請輸出所有時刻中(時間 ≥0),最前面的車子與最後面的車子之最小水平間距。
只要四捨五入輸出至小數以下第二位即可。
Sample Input
3
1 1
2 0
3 0
Sample Output
0.50
Solution
這題的 n 實在太大,沒辦法枚舉所有的超車事件來求出答案。注意到答案只要求到小數下第 2 位,可以考慮用近似解。設 xi(t) 為第 i 台車在 t 秒時的位置,則題目問的就是
f(t):=max1≤i≤nxi(t)−min1≤i≤nxi(t)
- f1(t):=max1≤i≤nxi(t) 是 convex function。
- f2(t):=min1≤i≤nxi(t) 是 concave function。
- f(t)=f1(t)−f2(t) 是 convex function。
|r−l|≤δ⇒|f(r)−f(l)|≤106δ
由題目要求可知 δ 必須滿足 106δ<0.005,故可以取 δ=10−10。這樣一來,三分搜次數就是 T:=log3/21016≈90.86,而整體的時間複雜度是 O(Tn),可在時間限制內解決。
我的 code:
留言
張貼留言