問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
データのハッシュ値を添字として用い、データを表に格納するデータ構造をハッシュテーブルと呼びます。このデータ構造には、データの挿入や検索が O(1) でおこなえるという利点があります。
ハッシュテーブルの最もシンプルな実装は、以下のようなものです。
・ 前準備
ハッシュ関数と、配列を用意する (ハッシュ関数の出力の範囲が、配列の添字の範囲に収まるように)・ データの挿入
データのハッシュ値を計算し、その値を添字として配列にデータを格納する・ データの検索
データのハッシュ値を計算し、その添字の位置にデータがあるかどうかを調べる
H1(d_i) = d_i % 10000
H2(d_i) = d_i // 10000
%
は剰余を計算する演算子、//
は切り捨て除算をおこなう演算子を表しています。
N
d_1
d_2
...
d_N
1 行目にハッシュ関数 H1 で衝突した回数を、2 行目にハッシュ関数 H2 で衝突した回数を出力してください。
また末尾に改行をいれ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
yyyymmdd
の形式で表した 8 桁の整数(例:2012 年 1 月 1 日は 20120101 となります)10
20120620
20130621
20140621
20150621
20160620
20170621
20180621
20190621
20200620
20210621
8
0
4
20220429
20220503
20220504
20220505
0
3
3
20140612
20180614
20221121
0
0