CF594A Warrior and Archer
题意翻译
给出偶数个点,AB两人轮流去掉一个点,直到只剩两个
A要使两点距离尽可能近,B要使两点距离尽可能远
假设AB两人都使用最佳策略,求最后两点间距离
题解:
题面说得不太好,重新给一遍题目大意:给出偶数的N,和N个点的坐标(数轴,整数),A,B轮流拿走一个点,A先拿,A要使两点距离尽可能近,B要使两点距离尽可能远,假设AB两人都使用最佳策略,求最后两点间距离。
其实感觉算不上紫题。
肯定要先按坐标排序啊,然后因为A要使得最后的两点距离尽可能近,那就要从两边选点,B就要从中间选点了。那么这就是一个简单的贪心,直接按题意,枚举所有可行点对即可。复杂度卡在排序上。
代码:
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2e5+5;
const int INF=1e9;
int n;
int a[maxn];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
int ans=INF;
for(int i=1;i<=n/2;i++)
ans=min(ans,a[i+n/2]-a[i]);
printf("%d",ans);
return 0;
}