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

文章目录

  • 日常刷题记录
    • 合并果子
      • 题目解析
      • 算法思路
      • 代码实现
    • 中位数
      • 题目解析
      • 算法思路
      • 代码实现
  • 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大的位置插入xfor(auto i:vec) cout<<i<<" ";
}

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

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

相关文章

人的心体本乐,回归自己,清静快乐

94天 孔颜之乐&#xff0c;乐是心的本体&#xff1b;真乐&#xff0c;常人所共有&#xff1b; 人心本体&#xff0c;原来就没有什么不快乐的 - 陆元静问&#xff1a;孔颜之乐与七情之中的“ 乐 ”是否相同呢&#xff1f;我经常愁闷&#xff0c;未曾体会过“真乐”的感受&#x…

classfinal太强了,再也不怕被反编译了

这段时间在辛辛苦苦的编写一个算法程序&#xff0c;担心部署到客户服务器&#xff0c;客户反编译jar包&#xff0c;破解程序&#xff0c;那努力就白费了&#xff01; 在网上查询&#xff0c;发现个好东东&#xff0c;classfinal可以加密jar包&#xff0c;防止反编译&#xff0…

华杉研发九学习日记18 集合 泛型

华杉研发九学习日记18 一&#xff0c;集合框架 1.1 集合和数组的区别 集合就是在java中用来保存多个对象的容器 集合是数组的升级版&#xff0c;集合中只能放置对象[object]. 数组: 在java中用来保存多个具有相同数据类型数据的容器 数组弊端&#xff1a; 1.数组只能保存…

【计算机网络】网络层——IPv4地址(个人笔记)

学习日期&#xff1a;2024.7.24 内容摘要&#xff1a;IPv4地址&#xff0c;分类编址&#xff0c;子网&#xff0c;无分类编址 IPv4地址概述 在TCP/IP体系中&#xff0c;IP地址是一个最基本的概念&#xff0c;IPv4地址就是给因特网上的每一台主机的每一个接口分配一个在全世界…

C语言 之 理解指针(4)

文章目录 1. 字符指针变量2. 数组指针变量2.1 对数组指针变量的理解2.2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用 5. 函数指针数组 1. 字符指针变量 我们在前面使用的主要是整形指针变量&#xff0c;现在要学…

实战练习之Linux上实现shell脚本自动化编程

实验拓扑要求 主机环境描述 注意&#xff1a; 172.25.250.101-172.25.250.105 共 5 个 IP 地址由servera.exam.com服务器进行提供。172.25.250.106 由 serverb.exam.com 服务器进行提供。 需求描述 1. 172.25.250.101 主机上的 Web 服务要求提供 www.exam.com Web站点&#…

A Comprehensive Study of Knowledge Editing for Large Language Models

大型语言模型&#xff08;LLMs&#xff09;在理解和生成与人类交流密切相关的文本方面表现出了非凡的能力。然而&#xff0c;一个主要的限制在于训练期间的大量计算需求&#xff0c;这是由于它们的广泛参数化而产生的。世界的动态性质进一步加剧了这一挑战&#xff0c;需要经常…

Unity UGUI 之Text 控件

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.Text是什么 UI里面写文本的&#xff08;注意是legacy Text&#xff0c;而不是TextmeshP…

前端网页打开PC端本地的应用程序实现方案

最近开发有一个需求&#xff0c;网页端有个入口需要跳转三维大屏&#xff0c;而这个大屏是一个exe应用程序。产品需要点击这个入口&#xff0c;并打开这个应用程序。这个就类似于百度网盘网页跳转到PC端应用程序中。 这里我们采用添加自定义协议的方式打开该应用程序。一开始可…

springboot项目从jdk8升级为jdk17过程记录

背景&#xff1a;公司有升级项目jdk的规划&#xff0c;计划从jdk8升级到jdk11 开始 首先配置本地的java_home 参考文档&#xff1a;Mac环境下切换JDK版本及不同的maven-CSDN博客 将pom.xml中jdk1.8相关的版本全部改为jdk17&#xff0c;主要是maven编译插件之类的&#xff0c…

mysql定时备份

为什么写这篇文章 最近项目里面需要定时备份mysql的数据&#xff0c;网上找了下&#xff0c;找到了一些比较好的解决方案。但是发现有几个地方与自己不匹配&#xff0c;我期望有如下 备份过程不能锁表&#xff0c;网上很多都是会锁表备份定时任务无法执行&#xff0c;但是手动…

【如何在Jenkins的从节点切换NPM镜像源查看和切换】

【问题】 Jenkins打包时&#xff0c;前端npm构建时很慢&#xff0c;所有需要更换镜像源 【自查】 找到Jenkins从节点上的nodejs安装的路径&#xff0c;进入bin目录 执行./npm -v查看是不能正常查看&#xff0c; [rootlocalhost bin]# ./npm -v /usr/bin/env: ‘node’: No su…

redis 基础命令

1.数据库命令 select 库名&#xff1b;切换库 flushdb 清空库 flushall 清空所有库 redis支持的数据类型有很多&#xff0c;使用最频繁的有String 字符串类型&#xff0c;List队列&#xff0c;Hash&#xff0c;Zset有序集合&#xff0c;Set集合。 2.字符串类型命令 表示k…

【Python机器学习】k-近邻算法简单实践——电影分类

k-近邻算法&#xff08;KNN&#xff09;的工作原理是&#xff1a;存在一个样本数据集合&#xff0c;也被称为训练样本集&#xff0c;并且样本集中每个数据都存在标签&#xff0c;即我们知道样本集中每一数据与所属分类的对应关系&#xff0c;输入没有标签的数据后&#xff0c;将…

Flink之重启策略

目录 1、固定延迟重启策略 2、失败率重启策略 3、不重启策略 在设置完 CheckPoint() 检查点机制后&#xff0c;不设置重启策略的话&#xff0c;&#xff0c;可以无限重启程序&#xff0c;那么设置的检查点机制也就没有什么意义了。因此&#xff0c;在生产实践中&#xff0c;…

android手势监听

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、使用四、 如何实…

昇思25天学习打卡营第17天 | CycleGAN图像风格迁移互换

通过深入学习CycleGAN模型&#xff0c;我对无监督图像到图像的转换技术有了更深的理解。CycleGAN不仅能在没有成对训练样本的情况下实现域之间的转换&#xff0c;而且在保持内容结构的同时成功转换图像风格&#xff0c;这在许多应用中都非常有用&#xff0c;如艺术风格转换、季…

VAE、GAN与Transformer核心公式解析

VAE、GAN与Transformer核心公式解析 VAE、GAN与Transformer&#xff1a;三大深度学习模型的异同解析 【表格】VAE、GAN与Transformer的对比分析 序号对比维度VAE&#xff08;变分自编码器&#xff09;GAN&#xff08;生成对抗网络&#xff09;Transformer&#xff08;变换器&…

Python从0到100(四十三):数据库与Django ORM 精讲

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

SpringMVC 控制层框架-下

五、SpringMVC其他扩展 1. 异常处理机制 1.1 异常处理概念 开发过程中是不可避免地会出现各种异常情况&#xff0c;例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题&#xff0c;甚至直接导致程序崩溃。因此&#xff0c;在开发过程中&a…