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

相关推荐
程序员-King.2 小时前
day124—二分查找—最小化数组中的最大值(LeetCode-2439)
算法·leetcode·二分查找
predawnlove2 小时前
【NCCL】4 AllGather-PAT算法
算法·gpu·nccl
世转神风-2 小时前
qt-在字符串中指定位置插入字符串
开发语言·qt
驱动探索者2 小时前
[缩略语大全]之[内存管理]篇
java·网络·算法·内存管理
时光呀时光慢慢走2 小时前
C# WinForms 实战:MQTTS 客户端开发(与 STM32 设备通信)
开发语言·c#
superman超哥2 小时前
仓颉类型别名的使用方法深度解析
c语言·开发语言·c++·python·仓颉
·云扬·2 小时前
MySQL Join关联查询:从算法原理到实战优化
数据库·mysql·算法
LFly_ice2 小时前
Next-4-路由导航
开发语言·前端·javascript
bbq粉刷匠2 小时前
二叉树中两个指定节点的最近公共祖先
java·算法
3824278272 小时前
python :__call__方法
开发语言·python