#44274: 有關於換位


isis0517 (同分異構式)

學校 : 不指定學校
編號 : 27333
來源 : [219.68.68.21]
最後登入時間 :
2024-11-24 08:55:54
k865. 7.幼稚園 (Kindergarten) -- TOI2020年8月新手同好會 | From: [210.243.192.16] | 發表日期 : 2024-11-19 14:40

老人看到有人在FB問這題就手癢上班偷偷來寫,

分享一下我在FB上看到吳邦一先生(我猜是老師?)給的提示 [原始連結]:

  • 算swap次數是不需要真正去排序的。如果你的左邊目前有k個比你大,你要移到他們前面就需要k次swap;相同的,如你的後方有h個比你大,你要移到它們後面就需要h次swap。如果是要排成由矮到高,答案就是算inversion(每個元素的前方有幾個比他大)

以下是更詳細的想法

 

 

 

 

我的排序策略是從矮的小朋友開始排序。對於每位小朋友移動到合法的位置有兩個選擇,往右走或是往左走。再走的時候是不需要考慮比她矮的小朋友,因為理論上比較小(矮)的小朋友都已經先排好到兩側了。所以每位小朋友需要的最小swap就是min(右走步數, 左走步數)。由於這題不需要真的排序出答案,所以是不需要真的swap小朋友就可以得到答案囉(HINT: 需要額外維護一個陣列)。

 
ZeroJudge Forum