切換
舊版
前往
大廳
主題

ZeroJudge - e933: pC. 字串加密 解題心得

Not In My Back Yard | 2020-04-03 02:32:10 | 巴幣 0 | 人氣 199

題目連結:


題目大意:
第一列給定一待加密的字串 s (1 ≦ 字串 s 長度 ≦ 10)。接著有任意多列輸入,每列給定一字串 w (所有字串包含 s 都是由小寫字母組成),代表字典的內容。

一個合法的加密字串滿足:
明文字母變成另一個字母,該字母不能與原字母相同。
字母的對應關係應為一對一。不能一對多,也不能多對一。

請從字典的 w 字串們找出一個對於 s 來說合法的加密字串。若無,輸出「impossible」;反之,輸出任意一個合法的即可。



範例輸入:
範例輸入一:
low
bee
barber
low
old
zigzag

範例輸入二:
zigzag
able
about
above
abroad
across
act
action
barber
low
old
zigzag

範例輸入三:
low
bee
barber
low
zigzag


範例輸出:
範例輸出一:
old

範例輸出二:
barber

範例輸出三:
impossible


解題思維:
對於每個 w ,先判斷 w 的長度有無跟 s 一致。若否,則代表一定不可能有一對一的對應關係,直接跳過即可。

一樣就掃過 s 的字母並對應到同位置的 w 字母。如果 s 目前的字母沒有對應,且 w 目前的字母也沒有「被」其他字母對應,則將該 s 字母對應到此 w 字母;如果 s 字母有對應且就是目前 w 的字母,則繼續判斷下一個字母。至於其他的情況即是對應失敗(出現一對多或是多對一)。

如果對應成功就輸出該 w 字串,則不必再判斷其他字串。反之,繼續判斷其他的字串,直到有對應。如果完全沒有可行的,最後就輸出「impossible」。

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

創作回應

相關創作

更多創作