CF1909D Split Plus K

题目描述

[eliteLAQ - Desert Ruins](https://soundcloud.com/lux-gg-198448038/desert-ruins) ⠀ 黑板上有 $n$ 个正整数 $a_1, a_2, \dots, a_n$。你还得到一个正整数 $k$。你可以进行如下操作若干次(可以为 $0$ 次): - 选择黑板上的一个数 $x$; - 擦去 $x$ 的一个出现; - 在黑板上写下两个正整数 $y$、$z$,满足 $y+z = x+k$。 你能否通过若干次操作使黑板上的所有数都相等?如果可以,最少需要多少次操作?

输入格式

每组测试数据包含多个测试用例。第一行包含测试用例数量 $t$($1 \le t \le 10^4$)。接下来是每个测试用例的描述。 每个测试用例的第一行包含两个整数 $n$ 和 $k$($1 \le n \le 2 \cdot 10^5$,$1 \leq k \leq 10^{12}$),分别表示黑板上初始数字的个数和常数 $k$。 每个测试用例的第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 10^{12}$),表示黑板的初始状态。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一行一个整数:使黑板上所有数字相等所需的最小操作次数。如果无法做到,输出 $-1$。

说明/提示

在第一个测试用例中,$k=1$。你可以通过以下操作使黑板上所有数字变为 $2$: - 擦去 $x=4$,写下 $(y, z) = (2, 3)$。注意 $y+z=x+k$。此时黑板为 $\{3, 2, 3\}$。 - 擦去 $x=3$,写下 $(y, z) = (2, 2)$。注意 $y+z=x+k$。此时黑板为 $\{2, 2, 2, 3\}$。 - 擦去 $x=3$,写下 $(y, z) = (2, 2)$。注意 $y+z=x+k$。此时黑板为 $\{2, 2, 2, 2, 2\}$。 这样共进行了 $3$ 次操作。可以证明无法用更少的操作使所有数字相等。 在第二个测试用例中,$k=3$。你可以通过以下操作使黑板上所有数字变为 $7$: - 擦去 $x=11$,写下 $(y, z) = (7, 7)$。注意 $y+z=x+k$。此时黑板为 $\{7, 7, 7\}$。 在第三个测试用例中,$k=10$。你可以通过以下操作使黑板上所有数字变为 $40$: - 擦去 $x=100$,写下 $(y, z) = (70, 40)$。注意 $y+z=x+k$。此时黑板为 $\{70, 40, 40, 100\}$。 - 擦去 $x=70$,写下 $(y, z) = (40, 40)$。注意 $y+z=x+k$。此时黑板为 $\{40, 40, 40, 40, 100\}$。 - 擦去 $x=100$,写下 $(y, z) = (40, 70)$。注意 $y+z=x+k$。此时黑板为 $\{40, 40, 40, 40, 40, 70\}$。 - 擦去 $x=70$,写下 $(y, z) = (40, 40)$。注意 $y+z=x+k$。此时黑板为 $\{40, 40, 40, 40, 40, 40, 40\}$。 在第四和第五个测试用例中,可以证明无法使所有数字相等。 由 ChatGPT 4.1 翻译