ptaR7-5打探基priority_queue的使用

news2025/1/23 16:28:43

题目

最近乐乐开发出了一款新的游戏《打探基》,这款游戏需要多人配合来玩,至少三个游戏玩家同时出招才能使探基的血量下降一点,同时,出招的每个人战斗力下降一点,当战斗力小于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;
    }
    else
        res=0;//如果不够3个那么不减
    if (res >= t)
        cout << "KO";//扣的大于剩下的,输出ko
    else
        cout << 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);//如果是负数那么取0
		pq1.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那么输出KO
	else cout<<hp;//如果大于0那么输出血量
}

总结

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

尾声

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

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

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

相关文章

系分笔记计算机网络功能、分类和部署

文章目录 1、概述2、计算机网络的功能3、计算机网络的部署结构4、计算机网络的分类4、总结 1、概述 计算机网络是系统分析师常考查的知识点&#xff0c;虽然不是专业的网络考试&#xff0c;但是网络常识是每一个考生需要掌握的。 2、计算机网络的功能 计算机网络是计算机技术与…

计算机毕业设计 基于SpringBoot的物资综合管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

uniapp打包h5部署到服务器

在学习uniapp&#xff0c;部署前后端分离项目。将h5的dist文件打包好后一直在考虑如何通过nginx反向代理到后端接口&#xff0c;整了半天也没整成。最后才发现&#xff0c;uniapp打包的h5页面包好像不需要反向代理到后端接口&#xff0c;只需要通过nginx将dist下的h5包代理了&a…

【AI】AI和医疗大数据(2/3)

目录 四、医疗大数据理论和技术 五、非结构化处理的重要性和方法 5.1 采集技术 5.2 处理技术 5.3 存储技术 5.4 关于Mapreduce 四、医疗大数据理论和技术 医疗大数据的理论和技术主要包括以下几个方面&#xff1a; 数据整合管理技术&#xff1a;这包括多源医疗大数据的语…

【软件测试】学习笔记-从0到1:API测试怎么做

这篇文章是API测试的基础&#xff0c;先从0到1设计一个API测试用例&#xff0c;通过这个测试用例&#xff0c;体会到最基本的API测试是如何进行的&#xff0c;并介绍几款常用的API测试工具。 API测试的基本步骤 通常来讲&#xff0c;无论采用什么API测试工具&#xff0c;API测…

JVM初识

什么是JVM&#xff1f; JVM全称是Java Virtual Machine&#xff0c;中文译名Java虚拟机。 JVM本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 JVM的功能 jvm的功能主要分为三部分&#xff1a; 解释和运行 对字节码文件中的指令&#xff0c;实…

【JavaWeb学习笔记】19 - 网购家居项目开发(上)

一、项目开发流程 程序框架图 项目具体分层方案 MVC 1、说明是MVC MVC全称: Mode模型、View视图、Controller控制器。 MVC最早出现在JavaEE三层中的Web层&#xff0c;它可以有效的指导WEB层的代码如何有效分离&#xff0c;单独工作。 View视图:只负责数据和界面的显示&…

imgaug库指南(17):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

Win2008R2上RedisDesktopManager 黑屏

问题&#xff1a; 运行发现右侧显示缓存信息的部分是黑屏。 解决方式&#xff1a; 管理工具->远程桌面服务->远程桌面会话主机配置->RDP-TCP->属性->客户端设置->颜色深度->限制最大颜色深度,将16位改为32位

基于嵌入式的智能台灯系统

基于嵌入式的智能台灯系统 功能说明 通过微信小程序控制台灯的亮灭及亮度。采集温湿度传到微信小程序上&#xff0c;台灯可以显示实时北京时间。 功能展示 01智能台灯演示 Mqtt服务器 http://www.yoyolife.fun/iot&#xff1a;Mqtt服务器&#xff0c;我是在这里注册的&#x…

【机器学习】半监督学习

一、问题假设 要利用无标签样本进行训练&#xff0c;必须对样本的分布进行假设&#xff1f; 二、启发式算法 自训练和协同训练是两种常用的半监督学习的方法&#xff0c;它们的主要区别在于使用的模型的数量和类型。 自训练&#xff1a;自训练是一种使用单个模型的半监督学习的…

【EI会议征稿通知】2024年机器学习与智能计算国际学术会议(MLIC 2024)

2024年机器学习与智能计算国际学术会议&#xff08;MLIC 2024&#xff09; 2024 International Conference on Machine learning and intelligent computing 智能计算与机器学习被广泛应用于大数据分析、人工智能、智能制造、智能交通、智能电网、智慧城市、智慧医疗、金融科…

语境化语言表示模型-ELMO、BERT、GPT、XLnet

一.语境化语言表示模型介绍 语境化语言表示模型&#xff08;Contextualized Language Representation Models&#xff09;是一类在自然语言处理领域中取得显著成功的模型&#xff0c;其主要特点是能够根据上下文动态地学习词汇和短语的表示。这些模型利用了上下文信息&#xf…

人工智能行业的发展前景如何?

人工智能&#xff08;AI&#xff09;已经成为如今科技领域的热门话题之一&#xff0c;从图像识别到自动驾驶&#xff0c;从语音助手到智能机器人&#xff0c;AI技术正在改变我们的生活方式。随着技术的不断发展和应用的扩大&#xff0c;人工智能行业的发展前景无疑是非常广阔的…

ios 1x/2x/3x

asset文件下可以配置1x/2x/3x图&#xff0c;然后不同机型屏幕会根据[UIScreen mainScreen].scale,自动按需读取相关图片,imageView可以根据image自动适应,需求有个包体积优化&#xff0c;使用 3x图webp格式替换asset图片&#xff0c;由于代码没有根据image尺寸自适应没有进行si…

构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的Nginx1.24.0的RPM包

本文适用&#xff1a;rhel9系列&#xff0c;或同类系统(CentOS9,AlmaLinux9,RockyLinux9等) 文档形成时期&#xff1a;2023年 因系统版本不同&#xff0c;构建部署应略有差异&#xff0c;但本文未做细分&#xff0c;对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…

【JVM】初识 Jvm

目录 什么是JVM JVM 的功能 常见的JVM 什么是JVM JVM 的全程是 Java Virtual Machine ( java 虚拟机 &#xff09; JVM 是一种用于计算设备的规范&#xff0c;也是一个虚构出来的计算机&#xff0c;通过在实际的计算机上仿真模拟各种计算机功能实现&#xff0c;JVM 屏蔽了…

函数——自制函数(c++)

今天进入自制函数。 自制函数&#xff0c;需要自己定义其功能。比如&#xff0c;设置一个没有参数没有返回值的积木&#xff0c;叫“aaa”。那么&#xff0c;如果想要运行“aaa”&#xff0c;就需要以下代码&#xff1a; void aaa(); 告诉系统有“aaa”…

如何从多个文件夹里各提取相应数量的文件放一起到新文件夹中形成多文件夹组合

首先&#xff0c;需要用到的这个工具&#xff1a; 百度 密码&#xff1a;qwu2蓝奏云 密码&#xff1a;2r1z 说明一下情况 文件夹&#xff1a;1、2、3里面分别放置了各100张动物的图片&#xff0c;模拟实际情况的各种文件 操作&#xff1a;这里演示的是从3个文件夹里各取2张图…

恒创科技:解决Windows服务器磁盘空间不足的问题

​  服务器硬盘的大小是决定空间是否充足的主要因素。但在日常使用中&#xff0c;服务器和网站备份会消耗大量存储空间&#xff0c;如果维护不当&#xff0c;最终将耗尽您的容量。同样&#xff0c;日志文件、临时文件和数据库可以在硬盘驱动器上或回收站中无休止地建立。当您…