切換
舊版
前往
大廳
主題

ZeroJudge - d777: NOIP2009 1.潛伏者 解題心得

Not In My Back Yard | 2020-10-14 00:00:18 | 巴幣 2 | 人氣 146

題目連結:


題目大意:
輸入有三列,每列給定長度介於 1 ~ 100 之間的字串(只由大寫字母組成)。第一列與第二列分別給定長度相同的字串,前者代表經過加密後的訊息、後者代表加密前的明文。第三列給定的字串,代表著需要解密的密文。

字串的加密規則為一個字母只映射到一個字母,且沒有任意兩個字母映射到同一字母,而字母可以映射到自身。

請試圖從第一個字串以及第二個字串推測出映射規則,而其會有以下三種情況:
一:從 A 到 Z 每個字母都能推出其映射的字母。
二:只有 A 到 Z 中的「部分」字母可以得知其映射的字母。
三:有不符合加密規則情況發生。

其中情況二以及情況三,一旦發生則直接輸出「Failed」;只有完全知道每個字母的映射,此時再根據推測出的規則將給定的密文所解出,並輸出該密文代表之明文。



範例輸入:
輸入範例 1:
QWERTYUIOPLKJHGFDSAZXCVBN
ABCDEFGHIJKLMNOPQRSTUVWXY
DSLIEWO

輸入範例 2:
MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP
YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL
FLSO


範例輸出:
輸出範例 1:
Failed

輸出範例 2:
NOIP


解題思維:
這題雷同。不過這次因為是要解密,所以要被映射者是密文字串、被映射的是明文字串。

而且做完以上步驟之後要檢查過程中有沒有出現矛盾,且每個字母最後都有被映射到。如果有矛盾或是有字母不存在映射,則輸出「Failed」。

如果上面判斷沒問題,此時再根據映射表將輸入第三列給定的密文解密成明文。




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

創作回應

更多創作