科大讯飞赞助的 CrossFire 比赛分组问题 - 最小实力差计算
科大讯飞赞助的 CrossFire 比赛分组问题 - 最小实力差计算
Compute, Cubercsl, SuperSodaSea, Ybmj 准备组队参加'科大讯飞'赞助的 CrossFire 比赛。
科大讯飞股份有限公司成立于1999年,是亚太地区知名的智能语音和人工智能上市企业。自成立以来,长期从事语音及语言、自然语言理解、机器学习推理及自主学习等核心技术研究并保持了国际前沿技术水平;积极推动人工智能产品研发和行业应用落地,致力让机器'能听会说,能理解会思考',用人工智能建设美好世界。
这场比赛需要两人一队组队参加,他们不知道怎么分组。已知他们的 CrossFire 分数分别为 a, b, c, d,现在想要把他们两两分为一队,使得他们的实力比较平均,也就是两队的实力差尽量小。
这里定义两队的实力差为每队的 CrossFire 分数之和的差值,现在他们想要知道这个实力差最小是多少。
输入描述:
仅一行,包含四个整数 a, b, c, d (1 ≤ a, b, c, d ≤ 3681),中间以空格分隔,分别表示四个人的 CrossFire 分数。
输出描述:
在一行输出一个整数,表示两个队伍实力差的最小值。
示例1
输入
2 1 3 4
输出
0
示例2
输入
2263 2110 2172 2109
输出
90
代码实现
思路:
首先,我们需要将四个人的分数排序,将分数从小到大排列。假设排序后的分数为a1, a2, a3, a4。
最小的实力差就是将a1和a2分为一队,a3和a4分为一队,它们的实力差就是(a1+a2)-(a3+a4)。
所以,我们只需要计算(a1+a2)-(a3+a4)的值即可。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> scores(4);
for (int i = 0; i < 4; i++) {
cin >> scores[i];
}
sort(scores.begin(), scores.end());
int diff = (scores[0] + scores[1]) - (scores[2] + scores[3]);
cout << diff << endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/RxB 著作权归作者所有。请勿转载和采集!