【笔试强训】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博客

相关推荐
LF男男4 分钟前
《C#数据结构与算法》—二分查找法和顺序查找
数据结构·算法
Java手札35 分钟前
Windows下Golang与Nuxt项目宝塔部署指南
开发语言·windows·golang
小生凡一38 分钟前
腾讯二面:TCC分布式事务 | 图解TCC|用Go语言实现一个TCC
开发语言·分布式·golang
minji...42 分钟前
C语言 函数递归
c语言·开发语言·算法
你好我是咯咯咯44 分钟前
代码随想录算法训练营Day36
算法
uhakadotcom1 小时前
如何用AI打造高效招聘系统,HR效率提升100%!
后端·算法·面试
云上空1 小时前
C#初级知识总结
开发语言·c#
虾球xz1 小时前
游戏引擎学习第246天:将 Worker 上下文移到主线程创建
c++·学习·游戏引擎
纪元A梦1 小时前
华为OD机试真题——绘图机器(2025A卷:100分)Java/python/JavaScript/C++/C/GO最佳实现
java·javascript·c++·python·华为od·go·华为od机试题
钢铁男儿1 小时前
C# 深入理解类:面向对象编程的核心数据结构
开发语言·数据结构·c#