No.3132 暗号メッセージ
問題文
この春、あなたが新規入部した競技プログラミング部ではメッセージを暗号化してやりとりするのが流行中です。
暗号化の手順は次の通りです。
- 半角英大文字のみで構成された長さ$N$文字$(1\ \le\ N\ \le 100)$の文字列のメッセージ$S$を用意します。
- 文字列$S$の$i$文字目の文字$S_i$を下記の変換表に従って整数$A_i$に変換した長さ$N$の数列$A$を作ります。
$S_i$ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z $A_i$ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 - $0$以上$1000$以下の値を重複なくランダムに$N$個選び昇順に並べた長さ$N$の数列$B$を用意します。
-
長さ$N$の数列$C$を数列$A$と数列$B$を用いて下記の計算式を用いて生成します。
- $C_i\ =\ 26\ \times\ B_i\ +\ A_i$ $(1\ \le\ i\ \le\ N)$
- 数列$C$の並びをシャッフルした(ランダムに並び替えた)長さ$N$の数列$D$を暗号化メッセージとします。
具体例を示します。
-
用意したメッセージ$S$を
"HELLO"
とします。長さ$N$は$5$です。 -
変換表に従って変換した数列$A$は
[7,4,11,11,14]
となります。 -
重複なくランダムに値を選び昇順に並べた数列$B$を
[2,13,45,101,617]
とします。 -
数列$C$は$C_i\ =\ 26\ \times\ B_i\ +\ A_i$を計算し、
[59,342,1181,2637,16056]
となります。 -
数列$C$の並びをシャッフルした数列$D$を
[2637,1181,59,16056,342]
としこれを暗号化メッセージとします。
競技プログラミング部の先輩からあなた宛てに暗号化メッセージが届きました。復号してメッセージを読みましょう!
入力
$N$ $D_1\ D_2\ D_3\ \dots\ D_N$
1行目にメッセージの長さ$N$、 2行目に暗号化メッセージの数列$D$の要素が空白区切りで与えられます。
$1\ \le\ N\ \le\ 100$
$0\ \le\ D_i\ \le\ 26025$ $(1\ \le\ i\ \le\ N)$
$D_i\ \neq\ D_j$ $(1\ \le\ i\ \lt\ j\ \le\ N)$
出力
$S$
復号したメッセージ$S$を1行に出力してください。 最後に改行してください。
サンプル
サンプル1
入力
5 2637 1181 59 16056 342
出力
HELLO
問題文で示した具体例の暗号化メッセージです。もちろん復号すれば"HEELO"
になります。
サンプル2
入力
15 23687 446 22319 22848 308 17799 2276 1545 1588 14614 7986 11896 2742 9327 19008
出力
WELCOMETOCPCLUB
『WELCOME TO CP CLUB
』、入部歓迎のメッセージのようです。
サンプル3
入力
18 5579 10261 22406 16380 9696 14381 17621 11173 20684 468 9803 4721 11343 19956 293 10070 17080 20226
出力
HAPPYBIRTHDAYTOYOU
『HAPPY BIRTHDAY TO YOU
』、競技プログラミング界では誕生日に数列を贈る文化があると聞いています…
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。