raw link: http://acm.timus.ru/problem.aspx?space=1&num=1794
大致意思:
在一個環形數組中, 每個元素擁有一訴求 == 想要謀求新的位置. 爲了讓更多的元素得到滿足, (你的移動方式只能是shift, 選定某個元素作定第一號位置,後面的維持順時針移動)
應該讓哪個元素來當第一號? ( 可以確定的是 有可行解, 但不一定是唯一解)
思路:(語境:Ruby)
這個題目的思考方式應有很多, 我只列一種自己比較喜歡的,也應該表達起來 被理解起來方便的一種.
公投式. 原來的每個元素(共n個) 各有自己想法, 難以統一起來, 因此需要藉助某機理, 讓他們統一比較 : 你如果要3, 那麼誰來當1? 順着這思路 -->
既然明確了移動方式 == shift. 說明當K號位置元素想要m時, 這與 他前面的 K-m這個位置元素想要第一 是等價的. 所以原來的表達方式如果是
共計6個元素 後面位置表示其訴求 . 最後表示其對應的等價1號說法
1 -> 3 --> 讓5號 作一號
2 -> 2 --> 讓1號 作一號
3 -> 4 --> 讓6號 作一號
4 -> 1 --> 讓4號 作一號
5 -> 3 --> 讓3號 作一號
6 -> 5 --> 讓2號 作一號
注意事項:
在ruby中 對一維數組的索引可以使用負值方式, 因此可以理解爲自帶了一個循環表.
這大大減輕了計算的複雜 也省去了一段邏輯判斷.
--
現在的我 還不能以速度\memo的極致作爲目標. Accepted 就好 :)