【笔试强训】Day1_贪心算法_组队竞赛

题目链接:牛客_组队竞赛


目录

题目解析

代码书写

知识补充


题目解析

题目让我们求所有队伍的水平值总和最大

由题可得:

队伍的水平值等于该队伍队员中第二高水平值;

随机给定3*n个数,需要自己组队并且得出队伍水平最大值;

我们拿示例分析:

首先为了方便分组我们先把数据排序

为了能取到第二高水平值, 我们这里先从高位取两个数,再从低位取一个数

这样就能保证我们所取到的第二位为最高值:

此时,最高位的下标位置为:2、4

以此类推:当n为3时,取到的最高位的下标位置为:3,5,7

那么通过推导得到n与最高位的 下标的关系为:

arr[arr.len (数组长度) -2(i+1)(i=0,i<n,i++)]


代码逻辑

cpp 复制代码
#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博客

相关推荐
CoovallyAIHub8 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub8 小时前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
xlp666hub8 小时前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
会员源码网10 小时前
构造函数抛出异常:C++对象部分初始化的陷阱与应对策略
c++
有意义10 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
xlp666hub12 小时前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
用户7268761033712 小时前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect12 小时前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
不想写代码的星星12 小时前
static 关键字:从 C 到 C++,一篇文章彻底搞懂它的“七十二变”
c++