【笔试强训】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 小时前
TongWeb8.0 JNDI缓存
开发语言·python·缓存
XMYX-013 小时前
03 - Go 常用类型速查表 + 实战建议(实战向)
开发语言·golang
爱码驱动13 小时前
Java多线程详解(5)
java·开发语言·多线程
AI成长日志13 小时前
【笔面试算法学习专栏】堆与优先队列实战:力扣hot100之215.数组中的第K个最大元素、347.前K个高频元素
学习·算法·leetcode
6Hzlia13 小时前
【Hot 100 刷题计划】 LeetCode 45. 跳跃游戏 II | C++ 贪心算法最优解题解
c++·leetcode·游戏
@atweiwei13 小时前
用 Rust 构建 LLM 应用的高性能框架
开发语言·后端·ai·rust·langchain·llm
北顾笙98013 小时前
day18-数据结构力扣
数据结构·算法·leetcode
九转成圣13 小时前
实战记录:用 Java 拼接长图/网格图,我踩了哪些坑?
java·开发语言
lzhdim13 小时前
SQL 入门 9:SQL 高级子查询:ANY、EXISTS 与多位置应用
java·开发语言·数据库·sql·mysql
阿Y加油吧13 小时前
LeetCode 中等难度 | 回溯法进阶题解:单词搜索 & 分割回文串
算法·leetcode·职场和发展