切換
舊版
前往
大廳
主題

ZeroJudge - b529: 板條編年史 (三):女裝風潮與 XX 之亂 解題心得

Not In My Back Yard | 2018-11-23 11:59:04 | 巴幣 0 | 人氣 144

題目連結:


題目大意:
給定一正整數 T ( 1 ≦ T ≦ 50 ),代表接下來有 T 個指令。

如果指令是「Where's my asphalt?」,則輸出現在的位置(一開始皆在可茵城,表示為「\」)。

如果指令是「Fly away.」,那麼下一行會緊接著表達位置的字串。以範例輸入為例:「\Mars\St. Martin」因為是以「\」開頭,所以直接從可茵城「\」飛到此位置(火星底下的聖馬丁)。所以現在在「\Mars\St. Martin\」。

「_」代表,飛到「上一層」位置。以上面來說,即是變成在「\Mars\」的位置。

而「St. Martin\_\yee」代表,先飛到「Mars」(現在的最底層的位置)底下的「St. Martin」,再飛回上一層(也就是「Mars」),最後飛到「Mars」底下的「yee」。因此現為「\Mars\yee\」之位。

以上表達位置的字串不會超過 200 字元長。地名只會由英文字母、空白以及「.」組成。



範例輸入:
7
Where's my asphalt?
Fly away.
\Mars\St. Martin
Where's my asphalt?
Fly away.
_
Where's my asphalt?
Fly away.
St. Martin\_\yee
Where's my asphalt?



範例輸出:
\
\Mars\St. Martin\
\Mars\
\Mars\yee\



解題思維:
首先,當在輸出位置(也就是接收到「Where's my asphalt?」指令)的其中要輸出「\」時,要注意要寫為「\\」。(因為「\」是特殊字元,用來表達換行「\n」之類的字元)

接下來是處理位置。當讀到以「\」開頭的字串時,預先將現有位置直接清空為「\」(可茵城,也就是原點)即可繼續;如果不是「\」開頭,就不用做這些,保持原樣就好。

然後把字串的內容掃過一次。碰到「_」要回到上一層、讀到的地點直接放在最後面。總體很像是一個「堆疊」(Stack),每次新元素都放在最上面,移除也是從最上面開始移除(每個元素就是一個地點)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作