【周记】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,一经查实,立即删除!

相关文章

SpringBoot接入mongodb例子,并有增删改查功能

1&#xff0c;首先&#xff0c;在pom.xml中添加依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!--上面这…

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

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

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

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

ShardingSphere-ElasticJob:分布式任务调度的深度解析

文章目录 引言官网链接ShardingSphere-ElasticJob 原理架构概览调度策略弹性伸缩 基础使用1. 引入依赖2. 配置任务3. 配置注册中心4. 启动任务 高级使用1. 自定义作业监听器2. 任务分片与分片策略3. 故障转移与容错 优缺点优点缺点 结论 引言 ShardingSphere-ElasticJob 是 Ap…

华杉研发九学习日记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站点&#…

Kafka系列之如何提高消费者消费速度

前言 在实际开发过程中&#xff0c;如果使用Kafka处理超大数据量(千万级、亿级)的场景&#xff0c;Kafka消费者的消费速度可能决定系统性能瓶颈。 实现方案 为了提高消费者的消费速度&#xff0c;我们可以采取以下措施&#xff1a; 将主题的分区数量增大&#xff0c;如 20&…

A Comprehensive Study of Knowledge Editing for Large Language Models

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

10 ES6的模板字符串

ES6模板字符串&#xff08;Template Literals&#xff09;是一种新的字符串表示方式&#xff0c;它提供了一种更为强大和灵活的方式来构建字符串。以下是ES6模板字符串的详细介绍&#xff1a; 基本语法 模板字符串使用反引号&#xff08;&#xff09;包围&#xff0c;而不是传…

Unity UGUI 之Text 控件

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

leetcode-136. 只出现一次的数字

题目描述 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间 示例 1 &#xff1a; 输入&…

搞懂Java继承,这样写代码轻松又高效!

大家好&#xff0c;我是小欧&#xff01; 今天我们来聊聊Java中的一个重要概念——继承。初学者常常觉得继承复杂&#xff0c;但掌握了它之后&#xff0c;代码写起来会更轻松高效。接下来&#xff0c;我会用大白话、简单易懂的例子&#xff0c;帮你彻底搞懂Java继承。 什么是继…

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

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

Spring 系列

SpringBoot 实体类&#xff08;Entity&#xff09;层 实体类&#xff08;Entity&#xff09;通常属于模型层&#xff08;Model Layer&#xff09;或领域层&#xff08;Domain Layer&#xff09;。它们代表应用程序中的核心业务数据结构&#xff0c;与数据库表结构紧密对应。在…

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…