题解 CF1300B 【Assigning to Classes】

ShineEternal

2020-02-10 08:55:54

Solution

## 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; } ```