題目連結:
題目大意:
有一 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 物件將對應關係存起來。
編碼與字元連結起來後,就看輸入什麼就輸出相應的編號即可。
因為輸入的資料量可能很大,所以要最佳化一下輸出入。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。