【周记】2024暑期集训第二周(未完待续)

news2024/11/26 11:44:53

文章目录

  • 日常刷题记录
    • 合并果子
      • 题目解析
      • 算法思路
      • 代码实现
    • 中位数
      • 题目解析
      • 算法思路
      • 代码实现
  • C++学习笔记
    • 队列queue
    • 双端队列 deque
    • 优先队列 priority_queue
      • 定义
      • 常见操作
    • upper_bound

日常刷题记录

合并果子

合并果子

题目解析

有一堆果子,每次可以将两小堆合并,耗费的体力为合并得到的这一堆的重量,给你每个小堆果子的重量,把这些果子合并成一堆后消耗的最小体力是多少

算法思路

由题意得知只要每次将重量最小的两堆果子合并就行了,你可以每合并一次就调用一次排序,但是STL提供了优先队列的数据结构,可以很好的完成这题,每次把前两个出队然后合并成一个再入队,直到队列里就剩一个元素。优先队列默认是降序的,所以定义的时候要注意加上greater<int>

代码实现

#include <bits/stdc++.h>
using namespace std;
int main() {
    priority_queue<int, vector<int>, greater<int> > q;
    int n;cin >> n;
    for(int i=1;i<=n;i++){
        int x;cin >> x;
        q.push(x);
    }
    int ans=0;
    while(q.size()>1){
        int tem=q.top();
        q.pop();
        tem+=q.top();
        q.pop();
        q.push(tem);
        ans+=tem;
    }
    cout << ans << endl;
    return 0;
}

中位数

中位数

题目解析

要求把序列里前奇数项的中位数全都输出,例如前1项、前3项、前5项…前 N + 1 2 \frac{N+1}{2} 2N+1

算法思路

这题用vector动态数组就可以实现了,一开始想用优先队列,但是由于优先队列只能访问首元素,所以不合适。向数组中依次插入元素,当元素的个数为奇数个的时候,取中间的元素(第(i-1)/2个元素)就可以了。重点在于怎么样插入,想象在打扑克牌时摸牌后插入的操作,只需要找到序列里第一个比当前数大的数,然后在其前面插入。STL正好提供了这样一个函数:upper_bound(序列首,序列尾,查找的数)具体看以下代码。upper_bound

代码实现

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;cin >> n;
    vector<int>a;
    for(int i = 1; i <= n ; i++)
    {
        int x;cin >> x;
        a.insert(upper_bound(a.begin(),a.end(),x),x);
        if(i%2 == 1)
        {
        	cout<<a[(i-1)/2]<<endl;
        }
    }
    return 0;
}

python也有类似的办法但是最后一个测试点超时了,仅作为学习了解

import bisect
n=int(input())
nums=list(map(int,input().split()))
vec=[]
for i in range(1,n+1):
    bisect.insort(vec,nums[i-1])#insort()函数将元素插入到vec中,并保持vec的有序性
    #也可以这么写
    # x=nums[i-1]
    # pos = bisect.bisect_right(vec, x)
    # vec.insert(pos, x)
    if(i%2==1):
        print(vec[(i-1)//2])

C++学习笔记

队列queue

  1. 创建队列

    queue<int> q1; // 使用默认构造函数创建一个空队列
    queue<int> q2({1, 2, 3}); // 使用初始化列表创建队列(需要自定义构造)
    
  2. 添加元素

    • push():将一个元素添加到队列的末尾。
      q.push(10); // 将10添加到队列末尾
      
  3. 移除元素

    • pop() :从队列的前端移除一个元素。
      q.pop(); // 移除队列前端的元素
      
  4. 访问元素

    • front():获取队列前端的元素,但不移除它。
      int frontElement = q.front(); // 获取队列前端的元素
      
    • back():获取队列末尾的元素,但不移除它。
      int backElement = q.back(); // 获取队列末尾的元素
      
  5. 检查队列状态

    • empty():检查队列是否为空。
      if (q.empty()) {
          std::cout << "队列为空" << std::endl;
      }
      
    • size():获取队列中元素的数量。
      size_t numElements = q.size(); // 获取队列中的元素数量
      
  6. 清空队列

    • clear():虽然 std::queue 没有直接提供 clear() 函数,但可以通过循环 pop() 所有元素来实现清空操作。

双端队列 deque

Q.push_back()在队尾插入一个元素

Q.push_front()在队首插入一个元素

Q.push_back()在队尾移除一个元素

Q.push_front()在队首移除一个元素

优先队列 priority_queue

为什么要用优先队列?

  • 给你n个数,对于所有元素来说,找到他前面(包括他)最大的元素

定义

priority_queue 是一个模板类,基本定义如下:

#include <queue>
#include <vector>

std::priority_queue<T, Container, Compare>
  • T:队列中存储的元素类型。
  • Container:底层容器,默认是 std::vector<T>
  • Compare:比较器,用于决定元素的优先级,默认是 std::less<T>(即最大堆)。

常见操作

  1. 创建优先队列

    priority_queue<int> pq1; // 默认最大堆,降序
    priority_queue<int, vector<int>, greater<int>> pq2; // 最小堆,升序
    
  2. 添加元素

    • 使用push()方法将元素添加到优先队列中。
      pq.push(10); // 添加元素 10
      
  3. 移除元素

    • 使用pop()会移除堆顶元素,但不会返回它。
        pq.pop(); // 移除堆顶元素
      
  4. 访问元素
    使用top()访问堆顶元素(即优先级最高的元素),但不移除它。

    int topElement = pq.top(); // 获取堆顶元素
    
  5. 检查队列状态

    • 使用 empty() 方法检查优先队列是否为空。
      if (pq.empty()) {
          std::cout << "优先队列为空" << std::endl;
      }
      
    • 使用size()方法获取优先队列中的元素数量。
      size_t numElements = pq.size(); // 获取元素数量
      

upper_bound

upper_bound 函数返回一个迭代器,指向一个在有序范围内第一个大于给定值 value 的元素。简单来说,它找的是第一个比 value 大的元素的位置。如果所有元素都小于或等于 value,则返回 lastupper_bound 通常用于在排序好的容器中查找某个值的插入位置,以保持容器的有序性。lower_bound同理

#include <bits/stdc++.h>
using namespace std;
int main(){
    vector<int> vec{1,4,7,8,12};
    int x=11;
    vec.insert(upper_bound(vec.begin(),vec.end(),x),x);//在第一个比x大的位置插入x
    for(auto i:vec) cout<<i<<" ";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

verilog行为建模(四):过程赋值

目录 1.两类过程赋值2.阻塞与非阻塞赋值语句行为差别举例13.阻塞与非阻塞赋值语句行为差别举例24.阻塞与非阻塞赋值语句行为差别举例35.举例4&#xff1a;非阻塞赋值语句中延时在左边和右边的差别 微信公众号获取更多FPGA相关源码&#xff1a; 1.两类过程赋值 阻塞过程赋值执…

漫威争锋Marvel Rivals测试搜不到 漫威争锋Marvel Rivals怎么搜

漫威争锋&#xff0c;一款今年即将上线的6v6的fps游戏&#xff0c;漫威争锋Marvel Rivals一经公布就吸引了广大玩家的兴趣。玩家将在游戏中扮演一名名经典且有趣的漫威英雄&#xff0c;与敌人展开对决。而且该游戏中有着很多的漫威英雄供我们挑选使用&#xff0c;有着很多英雄的…

【数据结构】排序算法——Lessen1

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

音乐播放器的优雅之选,黑金ONIX Overture XM5,更悦耳的音质体验

如今想要随时沉浸式的体验高品质的数字音乐资源&#xff0c;一款简单好用的音乐播放器必不可少&#xff0c;多年来在音乐爱好者的心中的经典品牌屈指可数&#xff0c;英国品牌ONIX算是一个&#xff0c;其Horizon系列以优雅的设计以及出众的品质&#xff0c;收获了很多忠实粉丝。…

OpenAI发布迷你AI模型GPT-4o mini

本心、输入输出、结果 文章目录 OpenAI发布迷你AI模型GPT-4o mini前言OpenAI发布迷你AI模型GPT-4o mini英伟达联合发布 Mistral-NeMo AI 模型:120 亿参数、上下文窗口 12.8 万个 tokenOpenAI发布迷你AI模型GPT-4o mini 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csd…

【ADRC笔记】LESO-Wb

公式推导(bilibili) 一阶ESO 二阶ESO 二阶自抗扰控制器基本原理 选取状态变量 观测器收敛性推导 wo 观测器带宽

C语言·函数(超详细系列·全面总结)

前言&#xff1a;Hello大家好&#x1f618;&#xff0c;我是心跳sy&#xff0c;为了更好地形成一个学习c语言的体系&#xff0c;最近将会更新关于c语言语法基础的知识&#xff0c;今天更新一下函数的知识点&#xff0c;我们一起来看看吧&#xff01; 目录 一、函数是什么 &a…

HTTPServer改进思路1

Nginx源码思考项目改进 架构模式 事件驱动架构(EDA&#xff09;用于处理大量并发连接和IO操作 优点&#xff1a;高效处理大量并发请求&#xff0c;减少线程切换和阻塞调用技术实现&#xff1a;直接使用EPOLL&#xff0c;参考Node.js的http服务器 网络通信 协议&#xff1a;HTT…

day6 io线程

获取终端输入的字符

记录 cocos 开发问题 ,微信 wx.xxx函数 报找不到名称“wx”

今天写微信排行榜遇到 问题分享一下。 目前&#xff0c;微信、百度 和 抖音 小游戏这些平台为了保护其社交关系链数据&#xff0c;增加了 开放数据域 的概念&#xff0c;这是一个单独的游戏执行环境。开放数据域中的资源、引擎、程序&#xff0c;都和主游戏&#xff08;主域&a…

【2】Spring Cloud 工程搭建

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring Cloud实战&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1.声明项目依赖和项目构建插件 2.完善子项目订单服务 2.1完善启动…

[Spring] Spring配置文件

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

Spring推出Spring AI框架,看看怎么个事

文章目录 概述SpringAI介绍Spring AI 提供以下功能支持的聊天模型有哪些支持的文生图的模型有哪些支持的音频到文本模型支持的嵌入模型有哪些支持的矢量数据库有哪些 概述 在当今快速发展的技术时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为各行各业的关键驱动…

Linux——awk操作符

[rootlocalhost ~] # awk BEGIN{x2;y3;print x**y,x^y,x*y,x/y,xy,x-y,x%y} 8 8 6 0 .666667 5 -1 2 赋值运算符 条件运算符 awk 中的条件运算符只有一个&#xff0c;其语法如下&#xff1a; expression?value1:value2 这是一个三目运算符&#xff0c;当表达式 expre…

#三元运算符(python/java/c)

引入&#xff1a;什么是三元运算符呢&#xff1f;无疑其操作元有三个&#xff0c;一个是条件表达式&#xff0c;剩余两个为值&#xff0c;条件表达式为真时运算取第一个值&#xff0c;为假时取第二个值。 一 Python true_expression if condition else false_expressi…

网络通讯实验报告

拓扑图 需求 1、通过DHCP服务&#xff0c;给PC4和PC5分配IP地址、网关、掩码、DNS服务器IP地址 2、Client-1要求手工配置IP地址&#xff0c;为192.168.1.1, c 3、telnet客户端可以远程登录telnet服务器进行设备管理&#xff0c;并成功修改telnet服务器的名字为123 &#xff0c…

两轮差速拖动机械臂瞄准接收口目标

下图所示&#xff0c;关节2为无动力旋转关节&#xff0c;关节4为无动力移动关节&#xff0c;关节5为旋转关节&#xff0c;差速轮可绕轮中心点4自由旋转&#xff0c;差速轮带动2和4关节运动。设计差速轮和机械臂解算方法&#xff0c;使其相互配合到达接收口&#xff0c;瞄准目标…

树上前缀和树状数组结合

怎么去分析这个题目&#xff0c;一开始我想的就是暴力dfs&#xff0c;接着枚举删除的节点&#xff0c;但是只过了百分之四十个点&#xff0c;代码如下&#xff1a;(这个代码有点像树形dp&#xff09; #include<bits/stdc.h> using namespace std;#define int long long c…

SHL笔试测评题型题库大揭秘适用公司通过技巧神助攻

⭕SHL题库外企应用的比较多&#xff0c;整体来看分为三类。 ✅第一类是综合能力&#xff0c;考察综合素质&#xff0c;要求36分钟完成24道题&#xff0c;适用范围最广。题型有安排时间问题、比例题、记忆题、排序题、日历题、图形变换题、图形推理题、拖线条题等等&#xff0c…

Linux_生产消费者模型

目录 1、生产消费者模型示意图 2、生产者消费者之间的关系 3、定义交易场所 4、实现生产消费者模型 5、伪唤醒 6、多生产多消费者的实际运用 7、POSIX信号量 7.1 初始化信号量 7.2 销毁信号量 7.3 等待信号量 7.4 发布信号量 8、生产消费的环形队列模型 8.1…