CF1946A.Median of an Array

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Median of an Array

题目描述

给定一个长度为 nn 的整数数组 aa

一个数组 q1,q2,,qkq_1, q_2, \ldots, q_k 的中位数定义为排序后数组 pp 的第 k2\lceil \frac{k}{2} \rceil 个数,即 pk2p_{\lceil \frac{k}{2} \rceil}。例如,数组 [9,5,1,2,6][9, 5, 1, 2, 6] 的中位数是 55,因为排序后为 [1,2,5,6,9][1, 2, 5, 6, 9],第 52=3\lceil \frac{5}{2} \rceil = 3 个数是 55;数组 [9,2,8,3][9, 2, 8, 3] 的中位数是 33,因为排序后为 [2,3,8,9][2, 3, 8, 9],第 42=2\lceil \frac{4}{2} \rceil = 2 个数是 33

你可以进行若干次操作,每次选择一个整数 ii1in1 \le i \le n),将 aia_i 增加 11

你的任务是求出最少需要多少次操作,才能使数组的中位数增加。

注意,数组 aa 中的数不一定各不相同。

输入格式

每组测试数据包含多个测试用例。第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n1051 \le n \le 10^5),表示数组 aa 的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n1ai1091 \le a_i \le 10^9),表示数组 aa

保证所有测试用例中 nn 的总和不超过 2×1052 \times 10^5

输出格式

对于每个测试用例,输出一个整数,表示最少需要多少次操作才能使数组的中位数增加。

说明/提示

在第一个测试用例中,你可以对第一个数进行一次操作,得到数组 [3,2,8][3, 2, 8],此时中位数为 33,因为排序后为 [2,3,8][2, 3, 8],第 32=2\lceil \frac{3}{2} \rceil = 2 个数是 33。原数组 [2,2,8][2, 2, 8] 的中位数为 22,排序后为 [2,2,8][2, 2, 8],第 32=2\lceil \frac{3}{2} \rceil = 2 个数是 22。因此,中位数在一次操作后增加了(3>23 > 2)。

在第四个测试用例中,你可以对第 1,2,31, 2, 3 个数各进行一次操作,得到数组 [6,6,6,4,5][6, 6, 6, 4, 5],此时中位数为 66,排序后为 [4,5,6,6,6][4, 5, 6, 6, 6],第 52=3\lceil \frac{5}{2} \rceil = 3 个数是 66。原数组 [5,5,5,4,5][5, 5, 5, 4, 5] 的中位数为 55,排序后为 [4,5,5,5,5][4, 5, 5, 5, 5],第 52=3\lceil \frac{5}{2} \rceil = 3 个数是 55。因此,中位数在三次操作后增加了(6>56 > 5),且这是最少的操作次数。

在第五个测试用例中,你可以对第 1,31, 3 个数各进行一次操作,得到数组 [3,1,3,3,1,4][3, 1, 3, 3, 1, 4],此时中位数为 33,排序后为 [1,1,3,3,3,4][1, 1, 3, 3, 3, 4],第 62=3\lceil \frac{6}{2} \rceil = 3 个数是 33。原数组 [2,1,2,3,1,4][2, 1, 2, 3, 1, 4] 的中位数为 22,排序后为 [1,1,2,2,3,4][1, 1, 2, 2, 3, 4],第 62=3\lceil \frac{6}{2} \rceil = 3 个数是 22。因此,中位数在两次操作后增加了(3>23 > 2),且这是最少的操作次数。

由 ChatGPT 4.1 翻译

样例

8
3
2 2 8
4
7 3 3 1
1
1000000000
5
5 5 5 4 5
6
2 1 2 3 1 4
2
1 2
2
1 1
4
5 5 5 5
1
2
1
3
2
1
2
3

在线编程 IDE

建议全屏模式获得最佳体验