贪心
这题题目读着一开始感觉挺复杂的,感觉写起来挺麻烦的,但这都是这个题目的障眼法。
题目最后只要求输出最小战斗力差距,只要这一个值!这意味根本不需要知道哪个人在哪个队伍,或者这是哪个人和哪个人和哪个人的差值。
分成两个队伍,只要其中一个的最大值和另一个的最小值的差值最小就满足题目要求。
举个例子:10 1000 100 1000 10000 100000
对其进行排序:10 100 1000 1000 10000 100000
发现其中差最小的是0,也就是1000与1000的差。将自左边的1000分为一队,右边剩下是一队,这就满足了题目的要求。
所以只要寻找排序后的最小差值!就贪这一个心而已。
题目要求的关键就是把一个排好序的序列按差值最小的部位进行左右分割罢了。只不过题目写的复杂吓人。
所以最后输出最小差值即可。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 1e5 + 9;
ll w[maxn];
ll dif[maxn];
int main()
{
int n; cin >> n;
for (int i = 1; i <= n; i++) cin >> w[i];
sort(w + 1, w + n + 1);
for (int i = n - 1; i >= 1; i--) dif[i] = w[i + 1] - w[i];
sort(dif + 1, dif + n);
cout << dif[1];
return 0;
}