第一题思路:如果长度长的那边 <= m, 则短的作为x;如果不满足上述条件,则长的作为x;第二题思路:题目要求这个美丽数组里面的所有数两两的&运算都得满足ai & aj = x,根据&运算的概念,两个位置都为1才能是1。所以,根据这个概念来看,如果要满足两两&运算都得为x的话,那么这个数组里面的每个数,就必须占满所有的1的位置,即出现1的位置就已经固定了,就是X所在20位里面出现1的地方。另外一个数的可选范围,就从X里面出现0的地方开始选,因为不管怎么样1 & 0 = 0,还是满足条件的。那么存在多少个0,就可选“多少个数 + 1(本身)”。public static void main(String[] args) {Scanner in = new Scanner(System.in);int t = in.nextInt();for (int i = 0; i < t; i++) {int num = in.nextInt();int n = num;// 看那几位是0List<Integer> zeros = new ArrayList<>();for(int j = 0; j < 20; j++){int sum = (n >> j) & 1;if(sum == 0){zeros.add(j);}}System.out.println(zeros.size() + 1);System.out.print(num + " ");for(int j = 0; j < zeros.size(); j++){System.out.print(num + (1 << zeros.get(j)) + " ");}System.out.println();}}第三题思路(没写了):打算按照树的思路去计算两个节点分别到Root的高度,然后根据是不是是不是在同一边,判断是加还是减。感觉这样肯定超时了,就没继续写了。