#arc155e. [arc155_e]Split and Square
[arc155_e]Split and Square
问题陈述
对于一个非负整数集合 ,记 为由 中的两个整数(可能相同)进行按位异或运算得到的非负整数构成的集合。例如对于 ,有 。
给定一个由 个小于 的非负整数组成的集合 。
你可以执行以下操作任意次数。
- 将 分成两个集合 和 (其中之一可以为空)。然后用 和 的并集替换 。
找到使得 所需的最小操作次数。
什么是按位异或运算?
非负整数 和 的按位异或运算 定义如下。
- 当以二进制形式表示 时,第 最低位()为 当且仅当 和 的第 最低位中只有一个为 ,否则为 。
例如,(二进制表示:)。 一般地, 个非负整数 的按位异或运算被定义为 $(\dots ((p_1 \oplus p_2) \oplus p_3) \oplus \dots \oplus p_k)$,可以证明这与 的顺序无关。
约束条件
- 互不相同。
- 输入中的每个 在二进制下恰好有 位(可能有前导零)。
- 输入中的所有值均为整数。
输入
输入以以下格式从标准输入读取:
输出
输出答案。
示例输入 1
4 2
00
01
10
11
示例输出 1
2
在第一次操作中,你可以将 分成 ,此时 $f(T_1) =\lbrace 0, 1\rbrace, f(T_2) =\lbrace 0, 1\rbrace$,用 替换 。
在第二次操作中,你可以将 分成 ,使得 。
无法在少于两次操作中使得 ,因此答案为 。
示例输入 2
1 8
10011011
示例输出 2
1
在第一次操作中,你可以将 分成 ,使得 。注意 或 可以为空。
示例输入 3
1 2
00
示例输出 3
0
从一开始就有 ,不需要任何操作。
示例输入 4
20 20
10011011111101101111
10100111100001111100
10100111100110001111
10011011100011011111
11001000001110011010
10100111111011000101
11110100001001110010
10011011100010111001
11110100001000011010
01010011101011010011
11110100010000111100
01010011101101101111
10011011100010110111
01101111101110001110
00111100000101111010
01010011101111010100
10011011100010110100
01010011110010010011
10100111111111000001
10100111111000010101
示例输出 4
10