1794. Masterpieces of World Architecture

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 就好 :) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章