#229. 一道十分不正经的题目

一道十分不正经的题目

题目描述

如你所见,这是一道十分不正经的题目,我们将十分不正经的考察你十分不正经的算法知识内容,题目如下:

给定 nn 个非负整数 a1,a2,,ana_1, a_2, \ldots, a_n 和一个整数 kk (1kn)(1 \leq k \leq n)。需要找到三个最小的非负整数 x,y,zx,y,z,使得以下三个条件成立:

  1. 对于按位与,集合 Sx={ai​ & x  1in}S_x = \{a_i​~\&~x~|~1 \leq i \leq n\} 中不同元素的个数 k\leq k
  2. 对于按位或,集合 Sy={ai​  y  1in}S_y = \{a_i​~\|~y~|~1 \leq i \leq n\} 中不同元素的个数 k\geq k
  3. 对于按位异或,集合 Sz={aiz  1in}S_z = \{a_i​ \oplus z~|~1 \leq i \leq n\} 中不同元素的个数 =k= k

分别给出 x,y,zx,y,z 的最小可行值,若无法满足则输出 1-1

按位运算:将两个数转为二进制数,对二进制表示中的每一位逐一运算。

按位与运算:0 & 0=0,0 & 0=1,1 & 0=0,1 & 1=10~\&~0 = 0,0~\&~0 = 1,1~\&~0 = 0,1~\&~1 = 1
例:5 & 6=(101)2 & (110)2=(100)2=45~\&~6 = (101)_2~\&~(110)_2 = (100)_2 = 4

按位或运算:0  0=0,0  1=1,1  0=1,1  1=10~\|~0 = 0,0~\|~1 = 1,1~\|~0 = 1,1~\|~1 = 1
例:5  6=(101)2  (110)2=(111)2=75~\|~6 = (101)_2~\|~(110)_2 = (111)_2 = 7

按位异或运算:$0 \oplus 0 = 0,0 \oplus 1 = 1,1 \oplus 0 = 1,1 \oplus 1 = 0$。
例:56=(101)2(110)2=(011)2=35 \oplus 6 = (101)_2 \oplus (110)_2 = (011)_2 = 3

输入格式

第一行包含两个整数 n,kn, k (1kn2×105)(1 \leq k \leq n \leq 2 \times 10^5)

第二行包含 nn 个整数 aia_i (0ai<230)(0 \leq a_i < 2^{30})

输出格式

如果有解,输出一行三个整数,分别代表 x,y,zx,y,z 的最小可行值;如果无解,输出 1-1

3 5
1 2 3
0 -1 -1
3 1
1 1 1
0 0 0

说明

对于样例 11,按题意分别尝试可以发现:

对按位与操作,可行的最小值为 00;对按位或和按位异或操作,均无法找到满足条件的值,因此输出 1-1