切換
舊版
前往
大廳
主題

ZeroJudge - e163: 01地圖問題 1 解題心得

Not In My Back Yard | 2019-04-17 12:53:57 | 巴幣 2 | 人氣 150

題目連結:


題目大意:
有一 N 列 M 行的地圖被用「ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/」這 64 個字元編碼而成。
A 代表「000000」、 B 代表「000001」、C 代表「000010」…… 以此類推,以字元在上面的字串出現的索引值之二進位作為其編號。其中「0」代表水域、「1」代表陸地。

現給定兩正整數 N 、 M (1 ≦ N 、 M ≦ 1, 200,且 M 為 6 的倍數),代表此地圖的行列數(如上所述)。接著的 N 列,每列給定 M ÷ 6 個字元,其為上面的編碼字元。

求這張地圖解碼後的樣子(也就是沒有編碼前的原樣)。



範例輸入:
3 12
L7
v/
Xe


範例輸出:
001011111011
101111111111
010111011110


解題思維:
先以「ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/」這個字串上的索引值之二進位去一一對應到相應的字元。可以單純宣告出一個陣列儲存對應的字元,或是反過來儲存對應的編號(但是要記得保留成 6 位數長)。也可以使用 C++ 的 map 物件將對應關係存起來。

編碼與字元連結起來後,就看輸入什麼就輸出相應的編號即可。

因為輸入的資料量可能很大,所以要最佳化一下輸出入

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

創作回應

更多創作