CF988D Points and Powers of Two
题目描述
在一条坐标线上有 $n$ 个不同的点,第 $i$ 个点的坐标为 $x_i$。从这些点中选择一个子集,使得子集中任意两点之间的距离都是某个整数的 $2$ 的幂。需要考虑子集内所有点对,不仅仅是相邻的点对。注意,任何只包含一个元素的子集都满足上述条件。在所有满足条件的子集中,选择一个点数最多的子集。
换句话说,你需要选择尽可能多的点 $x_{i_1}, x_{i_2}, \dots, x_{i_m}$,使得对于任意一对 $x_{i_j}$、$x_{i_k}$,都有 $|x_{i_j} - x_{i_k}| = 2^d$,其中 $d$ 是某个非负整数(对于不同的点对 $d$ 可以不同)。
输入格式
第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$),表示点的数量。
第二行包含 $n$ 个两两不同的整数 $x_1, x_2, \dots, x_n$($-10^9 \le x_i \le 10^9$),表示这些点的坐标。
输出格式
第一行输出一个整数 $m$,表示满足条件的子集中最多的点数。
第二行输出 $m$ 个整数,表示你选择的子集中这些点的坐标。
如果有多种答案,输出任意一种均可。
说明/提示
在第一个样例中,答案为 $[7, 3, 5]$。注意,$|7-3|=4=2^2$,$|7-5|=2=2^1$,$|3-5|=2=2^1$。无法找到包含更多点且满足要求的子集。
由 ChatGPT 4.1 翻译