atcoder#ARC155E. [ARC155E] Split and Square

[ARC155E] Split and Square

配点 : 900900

問題文

非負整数からなる集合 XX に対し、XX に属する 22 つの整数(同じ整数でもよい)のビット単位 XOR\mathrm{XOR} として表せるような非負整数からなる集合を f(X)f(X) と表します。例えば X={1,2,4}X=\lbrace 1, 2, 4\rbrace に対し f(X)f(X){0,3,5,6}\lbrace 0, 3, 5, 6\rbrace となります。

NN 個の 2M2^M 未満の非負整数からなる集合 S={A1,A2,,AN}S=\lbrace A_1, A_2, \dots, A_N\rbrace が与えられます。

あなたは以下の操作を好きな回数行えます。

  • SS22 つの集合 T1,T2T_1, T_2 に分ける( T1,T2T_1, T_2 のいずれかが空集合になってもよい)。その後、 SSf(T1),f(T2)f(T_1), f(T_2) の和集合で置き換える。

SS{0}\lbrace 0\rbrace にするのに必要な最小の操作回数を求めてください。

ビット単位 $\mathrm{XOR}$ 演算とは

非負整数 $A, B$ のビット単位 $\mathrm{XOR}$$A \oplus B$ は、以下のように定義されます。

  • $A \oplus B$ を二進表記した際の $2^k$ ($k \geq 0$) の位の数は、$A, B$ を二進表記した際の $2^k$ の位の数のうち一方のみが $1$ であれば $1$、そうでなければ $0$ である。
例えば、3 \oplus 5 = 6 となります (二進表記すると: 011 \oplus 101 = 110)。
一般に k 個の非負整数 p_1, p_2, p_3, \dots, p_k のビット単位 \mathrm{XOR}(\dots ((p_1 \oplus p_2) \oplus p_3) \oplus \dots \oplus p_k) と定義され、これは p_1, p_2, p_3, \dots, p_k の順番によらないことが証明できます。

制約

  • 1N3001 \leq N \leq 300
  • 1M3001 \leq M \leq 300
  • 0Ai<2M0 \leq A_i < 2^{M}
  • Ai (1iN)A_i\ (1\leq i \leq N) は互いに相異なる
  • AiA_i22 進表記でちょうど MM 桁で与えられる( AiA_iMM 桁より少ない場合、 leading zero をつけて与えられる)
  • 与えられる入力はすべて整数

入力

入力は以下の形式で標準入力から与えられる。

NN MM

A1A_1

A2A_2

\vdots

ANA_N

出力

答えを出力せよ。

4 2
00
01
10
11
2

11 回目の操作では T1={0,1},T2={2,3}T_1=\lbrace 0, 1\rbrace, T_2=\lbrace 2, 3\rbrace と分けると $f(T_1) =\lbrace 0, 1\rbrace, f(T_2) =\lbrace 0, 1\rbrace$ なので SS{0,1}\lbrace 0, 1\rbrace に置き換わります。

22 回目の操作で T1={0},T2={1}T_1=\lbrace 0\rbrace, T_2=\lbrace 1\rbrace と分けると S={0}S=\lbrace 0\rbrace となります。

22 回未満の操作で SS{0}\lbrace 0\rbrace にすることはできないので答えは 22 となります。

1 8
10011011
1

11 回目の操作で T1={155},T2={}T_1=\lbrace 155\rbrace, T_2=\lbrace \rbrace と分けると SS{0}\lbrace 0\rbrace になります。操作の際は T1,T2T_1, T_2 のいずれかが空集合になっても構いません。

1 2
00
0

はじめから S={0}S=\lbrace 0\rbrace であり、操作する必要がありません。

20 20
10011011111101101111
10100111100001111100
10100111100110001111
10011011100011011111
11001000001110011010
10100111111011000101
11110100001001110010
10011011100010111001
11110100001000011010
01010011101011010011
11110100010000111100
01010011101101101111
10011011100010110111
01101111101110001110
00111100000101111010
01010011101111010100
10011011100010110100
01010011110010010011
10100111111111000001
10100111111000010101
10