第一次發BZOJ的題解,先從水題開始吧,好不容易找到一道水題,那就從這題開始吧。
1.題設部分{
題目描述:
在一個2維平面上有兩條傳送帶,每一條傳送帶可以看成是一條線段。兩條傳送帶分別為線段AB和線段CD。lxhgww在AB上的移動速度為P,在CD上的移動速度為Q,在平面上的移動速度R。現在lxhgww想從A點走到D點,他想知道最少需要走多長時間?
Sample Input
0 0 0 100
100 0 100 100
2 2 1
Sample Output
136.60
[Submit]
}
2.題目分析{
對於這道題,我的物理老師經常說,做物理題要結合圖做,比如做力學的題目要做受力分析,做電學的題目要畫電路圖,這是一道運動學的題目,所以我們可以先把樣例畫出來,如下圖:
管他對不對呢,反正大概就這樣,將就着能用就行,顯然,我們可以發現,答案必然是從AB上的某一個點出發,經過平面,到達CD上的另一點然后到達D。即答案可以表示為
|AF|/P+|FE|/R+|ED|/Q ,其中F∈AB,E∈CD
我們考慮將F點(你喜歡E點就E點)確定,那么剩下的問題就在於確定E點(若前面選擇E點那就是確定F點,以后就統一E點算了)。那么怎么確定E點呢,生活常識告訴我們,在CD上肯定有一個最優的解,這個點兩側的解都越來越差,即函數圖像大致為下面這樣:
容易看出這是一個單峰函數,還是一個上凸的單峰函數,那么我們的問題就暫時變為了求這個單峰函數的極值。
下面介紹一種求單峰函數極值的方法:三分法,lrj的藍書上有較為詳細的記載。
三分法:
對於任意一個上凸函數,選取函數上任意兩個點A,B(xA<xB),若滿足yA<yB,那么該函數的極值點必然在[xA,+∞)中,若滿足yA>yB,那么該函數極值點必然在(-∞,xB]中,若滿足yA=yB,那么該函數的極值點必然在[xA,xB]中。
對於任意一個下凸函數,選取函數上任意兩個點A,B(xA<xB),若滿足yA<yB,那么該函數的極值點必然在(-∞,xB]中,若滿足yA>yB,那么該函數極值點必然在[xA,+∞)中,若滿足yA=yB,那么該函數的極值點必然在[xA,xB]中。
證明很簡單,有興趣的人可以自己證明一下。
繼續回到題目分析上來:
有了三分法后,我們得到了解決了對於某個特定點F,如何求得最優的E點的方法,但是,問題中並沒有給出F點在哪,那該怎么辦?
這時,我們可以思考這樣一個問題:如果我們已知某個確定的點E,能夠用三分法求出F嗎,顯然我們可以,那么我們就可以考慮用三分法的方法確定一個F,然后再通過這個F確定另一個E,即三分套三分,聽起來很可行的樣子,那么就寫一下試試。
代碼部分:
代碼等下補,我先打會兒游戲。
}