問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
私たちの身の回りでよく使われているハッシュ技術の一つがパスワード管理です。私たちは何かのサービス等に登録するとき、アカウントとパスワードを登録します。そのとき、ウェブサーバはパスワードをハッシュ化したものをデータベースに保管しています。ハッシュ化したパスワードから元のパスワードを特定することは非常に難しいため、個人情報の保護に役立っています。本問では、ハッシュ化したパスワードとアカウントでのログイン認証をおこなってみましょう。
まずデータベースの情報として、N 個のアカウント名 A_i とパスワードのハッシュ値 h_i の組 (1 ≦ i ≦ N) が与えられます。その後、M 個のアカウント名 B_j とパスワードの組 p_j (1 ≦ j ≦ M) が与えられます。これら M 個の組がデータベースに登録してあるアカウント情報と一致する、つまりログイン可能ならば Yes
、そうでないならば No
と出力してください。ただし、h_i (1 ≦ i ≦ N) はあるパスワード p を次のハッシュ関数 H を用いてハッシュ化したものです。
文字列 p の長さを m として、
H(p) = (p の 1 文字目の文字コード * B1 + p の 2 文字目の文字コード * B2 + ... + p の m 文字目の文字コード * Bm) % mod
N M
A_1 h_1
A_2 h_2
...
A_N h_N
B_1 p_1
B_2 p_2
...
B_M p_M
M 行出力してください。j (1 ≦ j ≦ M) 行目には、アカウント名 B_i とパスワード p_i でログイン可能ならば Yes
、そうでないならば No
と出力してください。
また、末尾に改行をいれ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
4 2
apple 925315561
banana 988302243
chocolate 635314873
donut 459428080
apple apple
banana bacon
Yes
No
4 2
apple 925315561
banana 988302243
chocolate 635314873
donut 459428080
eggplant eggplant
fudge apple
No
No