2011年3月24日 星期四

Codeforces #69

題目不太難,只是有些題目比較難讀懂,遲開始了,最後得分比較低。

A: 在三維空間的原點上有一物件。應用了次矢量為的力後,問最終物件是否原地不動。
答案﹕檢查 $\sum_i\vec{F_i} = \vec{0}$ 即可。

B: 一條長度為的跑道上有個section。每個跑手會在個section進行賽跑。假設個section每次賽跑都是分開進行的,若在某section裡下注了第跑手贏出而真的贏出的話,則得到元。每人每section賽跑時間都是。不能在沒人跑的賽道中下注,不能在沒有某參賽者不賽跑的section向其下注,問最多可以贏到多少錢?

好煩的題目。但只是直接枚舉每個section,在有人跑的回報裡取最大值,然後總和就是答案。

C: 給了種神器的原材料名稱,和種神器所需要的原材料及其數量。現在有個玩家和次採購。每次採購皆說明是哪位玩家買了甚麼原材料。
保証每次採購後只會有最多一種合作神器可以作成,問最後每人手上每種神器的數量,和有多少種神器。

直接就是做,比賽時沒過是因為我以為輸出的是玩家名稱,而不是神器的數量…

D: 在某座標上放了一隻棋子。兩個玩家輪流玩遊戲。每次可選取個之中的一個矢量然後加到該棋子上,保証矢量非零並且數值非負。除移動外,另可以選擇應用反射,即,但每位玩家只能在遊戲中應用一次。玩家不能把棋子移離原點距離以外。問若兩個玩家皆采取最佳策略,問誰會勝出。

經典的動態規劃題。但可以留意反射是沒有作用的,因為對方可以再應用一次反射抵銷。
另可以用SG定理,注意需處理SG函數為0的位置。

E: 給定一數組,詢問對於之間出現僅一次的元素的最大值,不存在的話則輸出"Nothing"。

直接的單調隊列題。大部分選手都用STL的set,我則用了Priority Queue來做,幸好沒有超時。主要做法是當需要處理新的元素時,把最舊的元素統計減1,然後把新元素的統計加1,若是新出現的元素則放到隊列內。每次輸出時把第一個隊列置頂的元素輸出,且其需要符合統計數為1。若不合資格則把它移除。

沒有留言: