题解 CF1300B 【Assigning to Classes】
ShineEternal
2020-02-10 08:55:54
## solution:
- 给定一个有 $2\times n$ 个数的数列。
- 让你把它分成两组,使得每一组的数量均为奇数。
- 请你求出两组中位数之差的绝对值的最小值。
首先令 $n=n\times 2$。
发现在数列中差的最小且能被作为中位数的数字是排序后位于 $\dfrac{n}{2}$ 和 $\dfrac{n}{2}+1$位置的数字。
所以就排个序把这两个数做差就行。
然后发现其实数组的范围是 $2\times 10^5$ ,所以数组别开小 RE 了。
## code:
```cpp
#include<cstdio>
#include<algorithm>
using namespace std;
int a[200005];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int cnt=0,sum=0;
n=n*2;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
printf("%d\n",a[n/2+1]-a[n/2]);
}
return 0;
}
```