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

相关推荐
树叶@13 分钟前
Python数据分析7
开发语言·python
wydaicls17 分钟前
十一.C++ 类 -- 面向对象思想
开发语言·c++
Biomamba生信基地1 小时前
R语言基础| 下载、安装
开发语言·r语言·生信·医药
姜君竹1 小时前
QT的工程文件.pro文件
开发语言·c++·qt·系统架构
思捻如枫1 小时前
C++数据结构和算法代码模板总结——算法部分
数据结构·c++
奇树谦1 小时前
使用VTK还是OpenGL集成到qt程序里哪个好?
开发语言·qt
嘉陵妹妹1 小时前
深度优先算法学习
学习·算法·深度优先
VBA63371 小时前
VBA之Word应用第三章第十节:文档Document对象的方法(三)
开发语言
老胖闲聊1 小时前
Python Rio 【图像处理】库简介
开发语言·图像处理·python
GalaxyPokemon1 小时前
LeetCode - 53. 最大子数组和
算法·leetcode·职场和发展