题解
题意:战士和射手两者对战,战士希望两者间的距离越近越好,射手希望两者间的距离越远越好,n个位置轮流禁位,直到最后剩下两个空位,问两者之间的距离
假设最后只剩下两个位置 lll 、rrr,那么 [l,r][l,r][l,r] 外的点肯定是战士禁掉的,[l,r][l,r][l,r] 内的点肯定是射手禁掉的,满足被禁掉点有 n−2n-2n−2 个就行了,如果有多个满足的点对,找距离最近的
ps:据说是个假题?

代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const int INF = 0x3f3f3f3f;
int x[N];
int n;
int main() {
ios::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> x[i];
}
sort(x + 1, x + 1 + n);
int tmp = (n - 2) / 2;
int dis = INF;
for (int i = 1; i <= n; ++i) {
if (i + tmp > n) continue;
int j = i + tmp + 1;
if (n - j + i - 1 == tmp && dis > abs(x[i] - x[j])) {
dis = abs(x[i] - x[j]);
}
}
cout << dis << endl;
return 0;
}
本文探讨了战士与射手对战中禁位策略的数学模型,通过算法找出两者间距离最短的情况。考虑到双方目标相反,文章提供了一种有效求解方案,即在满足禁位条件下寻找最近的距离。

189

被折叠的 条评论
为什么被折叠?



