題目連結:
題目大意:
輸入有三列,每列給定長度介於 1 ~ 100 之間的字串(只由大寫字母組成)。第一列與第二列分別給定長度相同的字串,前者代表經過加密後的訊息、後者代表加密前的明文。第三列給定的字串,代表著需要解密的密文。
字串的加密規則為一個字母只映射到一個字母,且沒有任意兩個字母映射到同一字母,而字母可以映射到自身。
請試圖從第一個字串以及第二個字串推測出映射規則,而其會有以下三種情況:
一:從 A 到 Z 每個字母都能推出其映射的字母。
二:只有 A 到 Z 中的「部分」字母可以得知其映射的字母。
三:有不符合加密規則情況發生。
其中情況二以及情況三,一旦發生則直接輸出「Failed」;只有完全知道每個字母的映射,此時再根據推測出的規則將給定的密文所解出,並輸出該密文代表之明文。
範例輸入:
輸入範例 1:
QWERTYUIOPLKJHGFDSAZXCVBN
ABCDEFGHIJKLMNOPQRSTUVWXY
DSLIEWO
輸入範例 2:
MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP
YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL
FLSO
範例輸出:
輸出範例 1:
Failed
輸出範例 2:
NOIP
解題思維:
與
這題雷同。不過這次因為是要解密,所以要被映射者是密文字串、被映射的是明文字串。
而且做完以上步驟之後要檢查過程中有沒有出現矛盾,且每個字母最後都有被映射到。如果有矛盾或是有字母不存在映射,則輸出「Failed」。
如果上面判斷沒問題,此時再根據映射表將輸入第三列給定的密文解密成明文。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。