您的位置:首页 > 其它

CodeForces 595C

2016-05-30 10:30 169 查看
题意:一个战士和一个箭士PK,战士是近战,他要距离箭士的尽可能近,而箭士是远战,他要距离战士尽可能远。现在,他们有n个位置,但是要去掉(n-2)个位置,从战士开始,每人轮流去掉一个位置,求如何去掉点,使他们的距离最优,输出最优距离。

题解:战士要使距离更近,应该是优先去掉边缘上的点,反之,箭士要使距离更远,应该尽可能去掉中间的位置;

战士想要使得两个位置尽可能近,而这两个位置的下标距离,再小也不能小于n/2;箭士想要使得两个位置尽可能远,而这两个位置的下标距离,再大也不能超过n/2。结合他们的小标距离,最优的应该是小标距离刚好为n/2;战士可以决定的是;选取小标距离为n/2中的最小距离。

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int a[200005];
#define INF 0x3f3f3f3f

int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int ans=INF;
int dis=n/2;
sort(a,a+n);
for(int i=dis;i<n;i++)
ans=min(ans,a[i]-a[i-dis]);
printf("%d\n", ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: