問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
※この問題は、2021年1月に開催されたP共通テスト(バンタンテックフォードアカデミー中高プログラミング共通テスト)で出題された問題です。
シーザー暗号に代表される換字式暗号は、アルファベットの文字を決まった文字数分シフトさせて置き換える、古典的で非常に単純な暗号です。なお、シフトとはアルファベット順で隣の文字にずらすことを指します。アルファベット順で次の文字 (z の次は a) にずらすことを右シフト、前の文字 (a の前は z) にずらすことを左シフトと呼ぶことにします。例えば、平文 yellow
の各文字を 4 文字右にシフトして暗号化すると cippsa
となります。これを復元するには、逆に 4 文字左シフトすればよいです。
ここで、アルファベットを 右にx (0 ~ 25) 文字シフトしたシーザー暗号を、rot-x
と呼ぶことにします。たとえば、平文 yellow
に対する暗号文 cippsa
は rot-4 、lryybj
は rot-13 です。
平文 s と暗号文 t が与えられます。この暗号文 t が rot-何 であるかを求めてください。つまり、平文 s の各文字を何文字右にシフトしたら暗号文 t が得られるかを求めてください。
ただし、この暗号文 t は間違っている可能性があるため、以下のように処理してください。
correct rot-x
と出力してください。fixed t'
と出力してください。incorrect
と出力してください。hello
に対してjgnnq
の場合は correct rot-2
と、kgnnq
の場合は fixed jgnnq
と、khnnq
の場合は incorrect
と出力してください。
n
s
t
平文 s に対応する暗号文 t が正しい場合は、rot x (x は 0 以上 25 以下の整数) を求め、correct rot-x
と出力してください。
1 文字のみ間違っている場合は、その 1 文字を修正した正しい暗号文 t' を用いて fixed t'
と出力してください。
2 文字以上間違っている場合は、incorrect
と出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 入力はすべて整数
・ 3 ≦ n ≦ 200,000
・ s, t は小文字アルファベット ('a', 'b', ... 'z') のみからなる
・ s, t の長さは n
・ s ≠ t
3
abc
zab
correct rot-25
3
abc
zbb
fixed zab
3
abc
zbc
fixed abc
3
abc
zcc
incorrect