题意:
已知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;
}