题目链接:牛客_组队竞赛
目录
题目解析
代码书写
知识补充
题目解析
题目让我们求所有队伍的水平值总和最大
由题可得:
队伍的水平值等于该队伍队员中第二高水平值;
随机给定3*n个数,需要自己组队并且得出队伍水平最大值;
我们拿示例分析:
首先为了方便分组我们先把数据排序:
为了能取到第二高水平值,我们这里先从高位取两个数,再从低位取一个数
这样就能保证我们所取到的第二位为最高值:
此时,最高位的下标位置为:2、4
以此类推:当n为3时,取到的最高位的下标位置为:3,5,7
那么通过推导得到n与最高位的下标的关系为:
arr[arr.len(数组长度) -2(i+1)(i=0,i<n,i++)]
代码逻辑
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;int main() {//输入int n = 0;while (cin >> n) {vector<int> arr;arr.resize(3 * n);for (int i = 0; i < n * 3; i++)cin >> arr[i];//排序std::sort(arr.begin(), arr.end());//求值long long sum = 0;for (int i = 0; i < n; i++)sum += arr[arr.size() - (2 * (i + 1))];cout << sum << endl;}return 0;
}
知识补充
1.关于c++中vector之resize & reserve
capacity:指容器在分配新的存储空间之前能存储的元素总数。
size:指当前容器所存储的元素个数
reserve:只改变容器大小(capacity),但并不是真正的创建对象(size)
resize:resize既分配了空间(capacity),也创建了对象(size)。
参数:
一个表示容器大小,一个表示初始值(默认为0)
reserve只带一个参数,表示容器预留的大小。
参考了这篇博客:c++ vector resize & reserve_c++中将一维数组resize-CSDN博客
C++ 中的sort()排序函数
该函数可以给数组,或者链表list、向量排序。
3个参数:
参数1:第一个参数是数组的首地址,一般是数组名或者迭代器。
参数2:要排序数据的尾地址。
参数3:默认可以不填,如果不填sort会默认按数组升序排序。可以自定义一个排序函数,改排序方式为降序。
需要包含头文件:#algorithm
参考了这篇博客:C++ 中的sort()排序函数原理、用法看这一篇就够了_c++升序函数不用sort-CSDN博客