2011年1月12日 星期三

SRM 493 DIV 1 300 StonesGame

是次SRM以慘淡告終,原因無他﹕題目實在比平時要難。
先說第一道題。

給N顆石子,其中只有僅一顆石子是與其他不同顏色。現在兩個玩家輸流玩以下遊戲。
每次操作必須選一連續K顆石子,且必須包含不同顏的那顆。選定後,把該選定段的石子排列倒置。
給定該顆石子初始位置M及目標位置L,和N及K,問誰勝出,還是和局?

首先看到和局二字,必須確定有沒有機會出現。有時Topcoder的題目挺吊詭的,指明若沒有解的話則回傳某個數值,然而題目卻始終有解。尤其是二人遊戲無解者通常不是Nimber型題目,所以若例子沒有和局情況,就需要先証明題目是否有機會無解或者能轉換至經典的Nimber題,從而對300分設定合理化。可是例子中的確有和局情況,那麼我們大可以排除Nimber。難的地方就是如何分情況處理了。

若然真的沒法下手,可以試試把操作條件Relax看看有沒有線索。如果可操作方式從「倒置」改為「任意排列」,
操作就相當於把石子直接向左或向右移動最多K步。那麼結果是顯然易見的。

定理一:若先手能一步把石子移至目標位置,則先手必勝。


否則的話,可以再仔細分析一下。首先,先手必須走第一步。對於所有先手能走的位置,假若後手都能順利把石子移至目標位置,則後手必勝。甚麼時候和局呢?留意操作是可逆的,即先手向左移石子K'步,後手把的逆操作則是把石子向右移K'步即可。假設後手無論怎樣移石子都不可能到達目標位置的話,後者每一步都有可能引至贏局或輸局。若至輸局的話,後手會選擇避免輸局而進行逆操作;若後手選擇至贏局的話,先手亦同樣采取逆操作。如此一來,遊戲會變成無限循環,使得成為和局。

定理二:若先手未能一步把石子移至目標位置,則若所有先手可步行之位置,後手能移至目標位置,後手必勝;否則和局。


定理一和定理二給出的結論就是:遊戲結果始終能在兩步內決定。同樣的定理是否也適用於原題?答案是肯定的,因為原本操作只是把石子限制了左K步右K步內可移動的地方,因此不影響結論的正確性。

在編寫上這個結論可能不夠有效,但用逆向的走法則能給出簡單的寫法。

1. 枚舉從位置L中所有可能一步到達的位置
2. 若位置M已被標記,則先手能一步到達,故先手能勝。
3. 否則從枚舉位置M中所有可能一步到達的位置。若遇上未被標記的位置,則存在未能兩步到達的賽局。故和局。
4. 若3.不能得出和局,則後手能勝。

故答案可以在O(N)的時間內給出。