题意:

已知n个数字,每次两个人从中取出一个数字,直到剩下2个数字。A希望最后2个数字尽可能小,B希望最后两个数字尽可能大。问,在相对聪明的情况下,最后两个数差的绝对值(距离)是多少


思路:逆向思维 。 考虑最后两个数字分别是X,Y(sort排序后)。

对于A来说,他希望两个数字尽可能小,那他不可能去删除X~Y之间的数字,假如他删这中间的数字,就相当于帮助了B去有能力删除 A左边or B右边的数字,使得距离变大。那么A肯定不划算。所以,那么index(y)-index(x)=(n-2)/2 + 1 暴力扫一遍就可以求得最小值


数据分析:2 ≤ n ≤ 200 000    0 ≤ ai ≤ 109


复杂度分析:O(n/2)


CODE:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn=2e5+50;
ll a[maxn];

int main(void)
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+1+n);
    ll ans=1e10;
    for(int i=1;i+n/2<=n;i++)
        ans=min(ans,a[i+n/2]-a[i]);
    cout << ans <<endl;
}