ユニークな配列の数

与えられた n 個の配列があり、それぞれに l 個の整数が含まれているとします。このとき、ユニークな配列の数を求めてください。ここで「ユニーク」というのは、少なくとも1つの要素が異なる場合に別の配列として扱うということです。
すべての配列を1つひとつ直接比較すると時間がかかりすぎる可能性があります。そのため、配列をハッシュ関数などを用いてハッシュ化し、ハッシュ値を比較してみるという手があります。
次に、サイズ m の大きな配列を用意して、すべての要素を0で初期化します。ハッシュ値が得られたら、そのハッシュ値を m で割った余りをインデックスとして、その箇所を1に変更します。最後に、この配列の中にある1の数を数えることで、ユニークな配列の数を推定することができます。
ただし、ハッシュ関数はインデックス範囲を [0; m) に収めるために、必ず m で剰余を取るようにしてください。

入力

最初の行には、2つの整数 n (1 ≤ n ≤ 1000) と l (1 ≤ l ≤ 1000) が与えられます。
続く n 行のそれぞれには、l 個の整数がスペース区切りで与えられます (0 ≤ )。

出力

ユニークな配列の数を出力してください。

入力
出力
4 3 1 2 3 3 2 1 2 5 3 3 2 1
3
2 3 1 2 3 4 1 2 3 4
1
ヒント
もしハッシュ関数があまり良くなく、衝突(コリジョン)が多い場合は、2種類のハッシュ関数を使って比較してみると、衝突への耐性がさらに高まるでしょう。
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue