CF1901C Add, Divide and Floor

题目描述

给定一个整数数组 $a_1, a_2, \dots, a_n$($0 \le a_i \le 10^9$)。每次操作,你可以选择一个整数 $x$($0 \le x \le 10^{18}$),并将所有 $a_i$ 替换为 $\lfloor \frac{a_i + x}{2} \rfloor$($\lfloor y \rfloor$ 表示向下取整到最近的整数)。请注意,每次操作会影响数组中的所有元素。 请输出使所有数组元素相等所需的最少操作次数。 如果操作次数不超过 $n$,请输出每次操作选择的 $x$。如果有多种答案,输出任意一种即可。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 每个测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \times 10^5$)。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($0 \le a_i \le 10^9$)。 所有测试用例中 $n$ 的总和不超过 $2 \times 10^5$。

输出格式

对于每个测试用例,输出使所有数组元素相等所需的最少操作次数。 如果操作次数不超过 $n$,则在下一行输出每次操作选择的 $x$。如果有多种答案,输出任意一种即可。

说明/提示

在第一个测试用例中,所有元素已经相等,因此需要 $0$ 次操作。你可以选择是否输出空行。 在第二个测试用例中,无法用少于 $2$ 次操作完成。有多种答案,考虑答案序列 $[2, 5]$。第一次操作选择 $x = 2$ 后,数组变为 $[\lfloor \frac{4 + 2}{2} \rfloor, \lfloor \frac{6 + 2}{2} \rfloor] = [3, 4]$。第二次操作选择 $x = 5$ 后,数组变为 $[\lfloor \frac{3 + 5}{2} \rfloor, \lfloor \frac{4 + 5}{2} \rfloor] = [4, 4]$。此时所有元素相等,操作完成。 在最后一个测试用例中,无法用少于 $6$ 次操作完成。由于 $6$ 大于 $n$,你不需要输出操作序列。一个可能的答案序列是 $[0, 0, 0, 0, 0, 0]$。我们每次只是在不断将第二个元素除以 $2$,而第一个元素不变。 由 ChatGPT 4.1 翻译