牛客网【每日一题】5月8日题目精讲 codeJan与旅行
比賽鏈接:
文章目錄
- 題目描述
- 題解:
題目描述
codeJan 非常喜歡旅行。現在有 n 個城市排在一條線上,并且 codeJan 的位置不和任何一個城市的位置重疊。 codeJan
想要游覽 m
個城市,同時因為時間是不斷變化的,游覽一個城市多次也是允許的,但是不能永遠待在一個城市,否則那樣太無聊了。給出這些城市的位置,codeJan
想要知道游覽 m 個城市至少需要走多少米? 輸入描述: 第一行是一個T≤20代表測試組數。
每組第一行是三個正整數n,m,p,分別代表城市數量、codeJan想要瀏覽的城市數量和codeJan當前的位置(單位為米)。
第二行包含n個正整數pos[i]表示第i個城市的位置,單位為米。 輸入保證pos[i]<posi+1,并且p ≠
posi。 輸出描述: 對于每組輸入數據輸出一個正整數表示 codeJan 至少需要走的距離。
示例1
輸入
輸出
3 2 3說明
對于第一個樣例的坐標最優移動順序可以是:2→3→1,移動距離一共是3。
對于第二個樣例的坐標最優移動順序可以是:1→2→3,移動距離一共是2。
對于第三個樣例的坐標最優移動順序可以是:4→5→6→5,移動距離一共是3。
備注:
2≤n≤105,1≤m≤105 ,1≤p,pos[i]≤109。
題解:
因為一個城市可以走多次,但不允許停留,那么最佳方案就是從p到兩個距離最小的城市,然后反復移動。
這樣只用考慮在哪兩個點之間徘徊,然后讓p前往,答案取最小就好
abs(pos [ai-] - pos [ai]) * sum
sum=剩下的所需要的瀏覽的城市數量(因為從p到這兩個城市的過程中也有經過其他城市)
但問題是我們保證率ai與ai-1這兩個城市的距離最小,但是p和這兩個城市以及其他城市的距離大小我們無法保證,如果p旁邊就有個很近的城市,距離小于ai與ai-1之間的距離,那不瀏覽這個城市豈不血虧
就比如
數據:
1
3 10 5
4 13 17
按照我們的方法從p=5到13,然后13到17,然后循環,這兩個城市距離是4,但從p到4再回來只需要2步,從p到13這段路是必須走的嘛,就先當于瀏覽相同的城市卻少走了2步,所以你會發現最佳應該是先到4,再到13,然后徘徊。如果第一個城市不是4是而是2,從p到1再回來是6步,大于4步,那我們就不要管4,直接前往13,13到17徘徊就可以了。
那會不會從p到附近兩個點或者多個,更會優化,這樣是不會的,因為我們求出來ai與ai-1的距離是最小的,也就是除此之外的兩個點一定比他倆距離大,那就不必要了,因為p的起始點不是城市,所以才會存在可能要從p先到附近更近的點。
總結下
我們先看看p附近有沒有更近城市,然后再去城市ai與ai-1
我大致就是理解到這個程度
此處借用大佬的代碼,我在里面寫了詳細的注釋,結合代碼看看分析
具體證明可以看這個題解大佬題解
總結
以上是生活随笔為你收集整理的牛客网【每日一题】5月8日题目精讲 codeJan与旅行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OPPO Reno11 / Pro 系列
- 下一篇: 博弈论讲解(一)