atcoder#ARC155E. [ARC155E] Split and Square
[ARC155E] Split and Square
题目描述
非負整数からなる集合 に対し、 に属する つの整数(同じ整数でもよい)のビット単位 として表せるような非負整数からなる集合を と表します。例えば に対し は となります。
個の 未満の非負整数からなる集合 が与えられます。
あなたは以下の操作を好きな回数行えます。
- を つの集合 に分ける( のいずれかが空集合になってもよい)。その後、 を の和集合で置き換える。
を にするのに必要な最小の操作回数を求めてください。
ビット単位 演算とは 非負整数 のビット単位 、 は、以下のように定義されます。
- を二進表記した際の () の位の数は、 を二進表記した際の の位の数のうち一方のみが であれば 、そうでなければ である。
例えば、 となります (二進表記すると: )。
一般に 個の非負整数 のビット単位 は $ (\dots\ ((p_1\ \oplus\ p_2)\ \oplus\ p_3)\ \oplus\ \dots\ \oplus\ p_k) $ と定義され、これは の順番によらないことが証明できます。
输入格式
入力は以下の形式で標準入力から与えられる。
输出格式
答えを出力せよ。
4 2
00
01
10
11
2
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
提示
制約
- は互いに相異なる
- 各 は 進表記でちょうど 桁で与えられる( が 桁より少ない場合、 leading zero をつけて与えられる)
- 与えられる入力はすべて整数
Sample Explanation 1
回目の操作では $ 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 $ なので は に置き換わります。 回目の操作で と分けると となります。 回未満の操作で を にすることはできないので答えは となります。
Sample Explanation 2
回目の操作で と分けると は になります。操作の際は のいずれかが空集合になっても構いません。
Sample Explanation 3
はじめから であり、操作する必要がありません。