Codeforces Round #618 (Div. 2) B. Assigning to Classes

229 阅读1分钟

B. Assigning to Classes

题目链接: Assigning to Classes
题目大意: 输入第一行给出一个数字n,第二行给出2n个数字,将这2n个数字分成2个班,使得两个班的中位数之差最小,求这个最小的差值
思路: 中位数定义是有序数列中间的数字,可以想到排序后找到中间两个数,这两个数的差值就是我们要的结果
代码:

#include<bits/stdc++.h>
#define repn(n) for(int i=1;i<=n;i++)
#define rep(n) for(int i=0;i<n;i++)
#define pb push_back
#define ll long long
const int maxn=2*1e5+5;
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int s[maxn],n;
        memset(s,0,sizeof(s));
        cin>>n;
        n=2*n;
        rep(n)
        {
            cin>>s[i];
        }
        sort(s,s+n);
        cout<<s[n/2]-s[n/2-1]<<endl;
    }
}