atcoder#ARC155E. [ARC155E] Split and Square
[ARC155E] Split and Square
配点 : 点
問題文
非負整数からなる集合 に対し、 に属する つの整数(同じ整数でもよい)のビット単位 として表せるような非負整数からなる集合を と表します。例えば に対し は となります。
個の 未満の非負整数からなる集合 が与えられます。
あなたは以下の操作を好きな回数行えます。
- を つの集合 に分ける( のいずれかが空集合になってもよい)。その後、 を の和集合で置き換える。
を にするのに必要な最小の操作回数を求めてください。
ビット単位 $\mathrm{XOR}$ 演算とは
非負整数 $A, B$ のビット単位 $\mathrm{XOR}$ 、$A \oplus B$ は、以下のように定義されます。
- $A \oplus B$ を二進表記した際の $2^k$ ($k \geq 0$) の位の数は、$A, B$ を二進表記した際の $2^k$ の位の数のうち一方のみが $1$ であれば $1$、そうでなければ $0$ である。
一般に 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 の順番によらないことが証明できます。
制約
- は互いに相異なる
- 各 は 進表記でちょうど 桁で与えられる( が 桁より少ない場合、 leading zero をつけて与えられる)
- 与えられる入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
出力
答えを出力せよ。
4 2
00
01
10
11
2
回目の操作では と分けると $f(T_1) =\lbrace 0, 1\rbrace, f(T_2) =\lbrace 0, 1\rbrace$ なので は に置き換わります。
回目の操作で と分けると となります。
回未満の操作で を にすることはできないので答えは となります。
1 8
10011011
1
回目の操作で と分けると は になります。操作の際は のいずれかが空集合になっても構いません。
1 2
00
0
はじめから であり、操作する必要がありません。
20 20
10011011111101101111
10100111100001111100
10100111100110001111
10011011100011011111
11001000001110011010
10100111111011000101
11110100001001110010
10011011100010111001
11110100001000011010
01010011101011010011
11110100010000111100
01010011101101101111
10011011100010110111
01101111101110001110
00111100000101111010
01010011101111010100
10011011100010110100
01010011110010010011
10100111111111000001
10100111111000010101
10