ハッシュメニュー】> FINAL問題 ハッシュテーブルを使おう (paizaランク C 相当) [難易度: 1811 ±40]

※リンク先へ移動するためには[paiza]へのログインが必要です。

問題文

ハッシュテーブル (チェイン法) を作り、データ (整数値) の挿入クエリと検索クエリを処理してください。

ハッシュテーブルは要素数 100 の配列とし、配列の各要素にはデータのリストを格納することとします。なお、各要素の初期値は空リストとします。各リストには複数のデータが含まれる可能性がありますが、格納された順番にデータが並ぶように実装してください。

ハッシュ関数は、入力で与えられる整数 a, b を用いて H(x) = (a * x + b) % 100 とします。

クエリは、以下の形式で入力されます。

1 x
ハッシュテーブルにデータ x を格納してください。

2 x
ハッシュテーブルにデータ x が格納されているかどうかを調べてください。格納されているなら Yes と、格納されていないなら No と出力してください。

すべてのクエリを処理したあと、ハッシュテーブルの状態を出力してください。

入力値(例)
17 13
10
1 1
1 2
1 3
1 4
1 5
2 4
2 7
2 2
2 1
2 6

出力値(例)
Yes
No
Yes
Yes
No






























1
















2
















3
















4
















5

解答例

解説

問題文の解読に苦労しましたが、クエリの処理の後にハッシュテーブル(配列)を出力するという解答のようです。

クエリは「2 x」がYes、Noの出力なので、in_array()で検索して出力しました。

そのあとに、配列を出力します。
配列は、クエリ「1 x」で処理したクエリを出力するのですが、

$hash = ($a * $x + $b) % 100;

このハッシュ計算をすると、

1 1 → 30
1 2 → 47
1 3 → 64
1 4 → 81
1 5 → 98

となるので、配列の$query[30]、$query[47]...とそれぞれの番号に$xを入れます。

YesNoの後に出力すると配列の空は改行になり30番まで空白でそのあと「1」が出力される...となります。分かりにくかったですw

おすすめの記事
スポンサーリンク