ptaR7-5打探基priority_queue的使用

题目

最近乐乐开发出了一款新的游戏《打探基》,这款游戏需要多人配合来玩,至少三个游戏玩家同时出招才能使探基的血量下降一点,同时,出招的每个人战斗力下降一点,当战斗力小于10的时候将不能再出招,不知道多个游戏玩家是否能打败探基。特别声明:探基是游戏中的人物,,请勿前去某宿舍实战。

输入格式:

第一行输入两个整数hp, n(0<hp, n<100000),ph表示探基初始血量,n表示游戏玩家数量。
第二行输入n个整数,表示n个玩家的初始战斗力。初始战斗力取值范围是[1,100000]。

输出格式:

当游戏玩家有可能打败探基时,输出KO,否则,输出探基最少剩余的血量。

输入样例:

在这里给出一组输入。例如:

100 5
50 30 80 60 60

输出样例:

在这里给出相应的输出。例如:

22

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

思路

本题有两种思路:

1.使用数学的思路,本题思维模拟性较大,代码也比较晦涩难懂,如果理解不了可以参照思路2。

2.使用stl的数据结构priority_queue来进行不断的更新和获得,运用大顶堆的特性来不断进行,更新和替换,具体的代码如下。

priority_queue

先对优先队列有一个简单的认识,默认为大顶堆,构造为priority_queue<int>pq;

 

大顶堆 

大顶堆就是队列头部固定为最大的一个。

小顶堆

小顶堆就是队列头部固定为最小的一个。

代码实现

思路1

#include <bits/stdc++.h>
using namespace std;
int n;
int a[100005];
int t;
int res;
int main()
{cin >> t >> n;for (int i = 1; i <= n; i++){cin >> a[i];a[i] -= 9;a[i] = max(a[i], 0);}if (n >= 3){for (int i = 1; i <= 3; i++){for (int j = i + 1; j <= n; j++){if (a[i] < a[j])swap(a[i], a[j]);}}//找最大的三个数int x = 0;for (int i = 4; i <= n; i++)x += a[i];//将后面的所有加和//引入只要有三个就一定能打完最小的理念,这里需要深刻理解if (x >= (a[1] - a[2]) + (a[1] - a[3]))//如果后面所有的大于等于最大的数减第二第三个数的和(最优情况同时避免第二第三个数相等的情况)那么说明这a[1]打完之后还会存留更多,所以加和除以三,寻找能满足的最大值res = (a[1] + a[2] + a[3] + x) / 3;else if (x >= a[2] - a[3])//如果前面条件不满足而满足大于第二个减第三个的值,说明最大的一定打不完,但第二个有可能打完并且更多,所以取a[2]和剩下的加和除以2判断能成立的最大值res = (a[2] + a[3] + x) / 2;else//如果都不满足,那么就是后面能打多少打多少,第二个的值超出了后面的和,一定能打完res = a[3] + x;}elseres=0;//如果不够3个那么不减if (res >= t)cout << "KO";//扣的大于剩下的,输出koelsecout << t - res;//够了还剩,输出剩下的
}

思路2

#include <bits/stdc++.h>
using namespace std;
int main(){priority_queue<int>pq1;//构造大顶堆int hp,n,t,m;cin>>hp>>n;//输入血量,人数m=n;while(m--){cin>>t;t-=9;//每个人最多打多少次t=max(t,0);//如果是负数那么取0pq1.push(t);//填充大顶堆}while(n>=3){int x1,x2,x3;x1=pq1.top(),pq1.pop();x2=pq1.top(),pq1.pop();x3=pq1.top(),pq1.pop();//取最大的三个数if(x1>0&&x2>0&&x3>0){x1--,x2--,x3--,hp--;//直到最大的有一个到0,说明已经打不动了(小于三个人)pq1.push(x1),pq1.push(x2),pq1.push(x3);//再填充回去}else break;//打不动就停止}if(n<3)cout<<hp;//如果小于3个人直接输出else if(hp<=0)cout<<"KO";//如果血量小于等于0那么输出KOelse cout<<hp;//如果大于0那么输出血量
}

总结

本题带我们熟悉了priority_queue容器的使用,联系了大顶堆和小顶堆,以及思维的理念和想法,笔者更加推崇容器的使用,带我们再次领略stl的魅力和便捷,希望大家能够多多使用stl,跟随笔者慢慢成长。

尾声

本题带我们认识和理解了大顶堆,小顶堆,多加练习,多加熟练。如果觉得笔者写的还不错的话,记得留下你的点赞关注和收藏奥~

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

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

相关文章

electron+vue网页直接播放RTSP视频流?

目前大部分摄像头都支持RTSP协议&#xff0c;但是在浏览器限制&#xff0c;最新版的浏览器都不能直接播放RTSP协议&#xff0c;Electron 桌面应用是基于 Chromium 内核的&#xff0c;所以也不能直接播放RTSP&#xff0c;但是我们又有这个需求怎么办呢&#xff1f; 市场上的方案…

一小时掌握:使用ScrapySharp和C#打造新闻下载器

引言 爬虫技术是指通过编程的方式&#xff0c;自动从互联网上获取和处理数据的技术。爬虫技术有很多应用场景&#xff0c;比如搜索引擎、数据分析、舆情监测、电商比价等。爬虫技术也是一门有趣的技术&#xff0c;可以让你发现网络上的各种有价值的信息。 本文将介绍如何使用…

Unity组件开发--长连接webSocket

1.下载安装UnityWebSocket 插件 https://gitee.com/cambright/UnityWebSocket/ 引入unity项目&#xff1a; 2.定义消息体结构&#xff1a;ExternalMessage和包结构Package&#xff1a; using ProtoBuf; using System; using System.Collections; using System.Collections.Ge…

【java八股文】之Java基础篇

1、Java有哪几种数据类型 基本数据类型&#xff1a;byte(1字节) short&#xff08;2字节&#xff09; int&#xff08;4字节&#xff09; long&#xff08;8字节&#xff09; float&#xff08;4字节&#xff09; double&#xff08;8字节&#xff09; char&#xff08;2字节&a…

【动态规划】 【字典树】C++算法:472 连接词

作者推荐 【动态规划】458:可怜的小猪 涉及知识点 动态规划 字典树 LeetCode472 连接词 给你一个 不含重复 单词的字符串数组 words &#xff0c;请你找出并返回 words 中的所有 连接词 。 连接词 定义为&#xff1a;一个完全由给定数组中的至少两个较短单词&#xff08;不…

DUET: Cross-Modal Semantic Grounding for Contrastive Zero-Shot Learning论文阅读

文章目录 摘要1.问题的提出引出当前研究的不足与问题属性不平衡问题属性共现问题 解决方案 2.数据集和模型构建数据集传统的零样本学习范式v.s. DUET学习范式DUET 模型总览属性级别对比学习正负样本解释&#xff1a; 3.结果分析VIT-based vision transformer encoder.消融研究消…

RTL编码(1)——概述

一、RTL级描述 RTL&#xff08;Register Transfer Level&#xff09;级&#xff1a;寄存器&#xff0b;组合逻辑&#xff0c;其功能与时序用Verilog HDL&#xff08;以下简称Verilog&#xff09;或VHDL代码描述。 RTL描述包含了同步数字电路最重要的三个特征&#xff1a;组合逻…

【Python】编程练习的解密与实战(三)

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《Python | 编程解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1fa90;1. 初识Python &a…

[BJDCTF2020]ZJCTF,不过如此

题目源码&#xff1a; <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo "<br><h1>".file_get_contents($tex…

vscode 创建文件自动添加注释信息

随机记录 目录 1. 背景介绍 2. "Docstring Generator"扩展 2.1 安装 2.2 设置注释信息 3. 自动配置py 文件头注释 1. 背景介绍 在VS Code中&#xff0c;您可以使用扩展来为新创建的Python文件自动添加头部注释信息。有几个常用的扩展可以实现此功能&#xff0…

im6ull学习总结(三-五)freetype显示正行字

知识补充 笛卡尔坐标系 这里笛卡尔坐标系就是初高中学的直角坐标系的第一象限 lcd坐标系则不同 这两个坐标系如何转换 观察两个坐标系 点&#xff08;x,y&#xff09;的x坐标在两个坐标系中相同&#xff0c;纵坐标&#xff08;y&#xff09;存在着yV-yV V是整个屏幕的行数的像…

Mysql是怎么运行的(上)

文章目录 Mysql是怎么运行的Mysql处理一条语句的流程连接管理解析与优化存储引擎 基本配置配置文件系统变量状态变量字符集四种重要的字符集MySQL中的utf8和utf8mb4各级别的字符集和比较规则MySQL中字符集的转换排序规则产生的不同的排序结果 InnoDB存储引擎介绍COMPACT行格式介…

PostgreSQL内存浅析

体系结构 &#xff08;https://www.postgresql.fastware.com/blog/lets-get-back-to-basics-postgresql-memory-components&#xff09; &#xff08;http://geekdaxue.co/read/fcantsql/qts5is) 共享内存 linux的共享内存实现 (https://momjian.us/main/writings/pgsql/insi…

解锁前端新潜能:如何使用 Rust 锈化前端工具链

前言 近年来&#xff0c;Rust的受欢迎程度不断上升。首先&#xff0c;在操作系统领域&#xff0c;Rust 已成为 Linux 内核官方认可的开发语言之一&#xff0c;Windows 也宣布将使用 Rust 来重写内核&#xff0c;并重写部分驱动程序。此外&#xff0c;国内手机厂商 Vivo 也宣布…

如何利用ChatGPT快速生成月报?

随着每个月的结束&#xff0c;个人和团队经常需要编写月报来回顾和总结。这项任务通常消耗大量时间和精力。幸运的是&#xff0c;借助ChatGPT&#xff0c;这个过程可以变得更加简单和高效。接下来&#xff0c;我将详细介绍如何利用ChatGPT快速生成月报&#xff0c;从而帮助你节…

回归预测 | Matlab基于CPO-BP基于冠豪猪算法优化BP神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于CPO-BP基于冠豪猪算法优化BP神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于CPO-BP基于冠豪猪算法优化BP神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CPO-BP回归基于冠豪猪优化算法[24年新…

Redis(四)事务

文章目录 事务Redis事务 vs 数据库事务常用命令总结 事务 一个队列中、一次性、顺序性、排他性执行一系列命令 官网https://redis.io/docs/interact/transactions/ Redis事务 vs 数据库事务 概述详述1、单独的隔离操作Redis的事务仅仅是保证事务里的操作会被连续独占的执行&a…

【AI视野·今日Sound 声学论文速览 第四十三期】Mon, 8 Jan 2024

AI视野今日CS.Sound 声学论文速览 Mon, 8 Jan 2024 Totally 6 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers MusicAOG: an Energy-Based Model for Learning and Sampling a Hierarchical Representation of Symbolic Music Authors Yikai Qian, Tia…

leetcode面试经典150题——50 快乐数

题目&#xff1a;快乐数 描述&#xff1a; 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变…

Element-ui图片懒加载

核心代码 <el-image src"https://img-blog.csdnimg.cn/direct/2236deb5c315474884599d90a85d761d.png" alt"我是图片" lazy><img slot"error" src"https://img-blog.csdnimg.cn/direct/81bf096a0dff4e5fa58e5f43fd44dcc6.png&quo…