数据结构作业——Fresh Meat(优先队列)
Fresh Meat
Description
我们故事的主角是屠夫扒鸡,起初屠夫扒鸡只是一个佣兵,他先去拜了太上老君为师,学了一技能肉钩,凭着一技肉钩驰骋决斗场,达到一段以后到阿尔伯特那里偷学了二技能肢解,这下可以连招了。后来因为太久没洗澡习得三技能腐烂。因为腐烂损人损己,扒鸡又懒得出回血装备,于是拜师蜘蛛,学了招极度饥渴,你懂的(不是字面上的意思) 。现在扒鸡自定义了个 RPG 要试试水了。RPG 地图介绍:地图上一共会出现 N 只英雄,每只英雄都有自己的生命值 Hi(不管什么英雄,扒鸡都是肉钩、腐烂、肢解一套带走) ,带走英雄的同时由于腐烂自己会损耗被杀死的英雄同等生命值的血量(提醒大家勤洗澡) ,一只英雄死后另一只英雄才会出现。扒鸡初始血量是 M,必要时可以开极度饥渴回血,一次只能吸一个英雄的血,腐烂效果还在,耗血Hi,但饥渴吸血量等于 Hi*2(相当于回复了 Hi 血量,血量没有上限,可以无限回复) ,啊~fresh meat~。扒鸡想知道自己最少要饥渴几次才能通关。注:血量小于等于 0 时将被带走。饥渴状态直接计算回血,忽略耗血
Input
第一行给出两个整数 N,M——要一套带走的英雄数量 N 和扒鸡的初始血量 M
接下来一行,给出 N 个英雄的血量 Hi(i∈1~N) ,英雄按照给出的顺序出现。
其中 0<N<=10000,0<=Hi<=10^9,1<=M<=10^9,
Output
Sample Input
7 85 2 3 3 1 4 6
Sample Output
2
思路
要求需要的最少饥渴次数,我们可以换个角度,每杀死一个英雄,就获得一次使用饥渴技能的机会,那么每次在血量没有的时候,从杀死的英雄中选出血量值最多的英雄即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn = 10005;
struct Node
{
int val;
bool flag;
Node(): val(0), flag(false)
{
}
bool operator < (const Node &a)const
{
return val < a.val;
}
} node[maxn];
int main()
{
//freopen("input.txt", "r", stdin);
int N, M, i, res = 0;
priority_queue<Node>que;
scanf("%d%d", &N, &M);
for (i = 0; i < N; i++) scanf("%d", &node[i].val);
for (i = 0; i < N; i++)
{
if (M >= node[i].val)
{
M -= node[i].val;
node[i].flag = true;
que.push(node[i]);
}
else
{
node[i].flag = true;
que.push(node[i]);
while (M < node[i].val && !que.empty())
{
Node tmp = que.top();
que.pop();
if (tmp.flag)
{
M += 2 * tmp.val;
}
else
{
M += tmp.val;
}
res++;
}
M -= node[i].val;
}
}
printf("%d\n", res);
return 0;
}
数据结构作业——Fresh Meat(优先队列)的更多相关文章
- 数据结构作业——Sanji(优先队列)
山治的婚约 Description 我们知道,山治原来是地下有名的杀人家族文斯莫克家族的三子,目前山治的弟弟已经出现,叫做四治,大哥二哥就叫汪(One)治跟突(Two)治好了(跟本剧情无关) .山治知 ...
- 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
ギリギリ eye Description A.D.1999,由坠落地球的“谜之战舰”带来的 Over Technology,揭示了人类历史和远古文明之间的丝丝联系, 促使人类终止彼此间的战争,一方面面 ...
- Java数据结构之堆和优先队列
概述 在谈堆之前,我们先了解什么是优先队列.我们每天都在排队,银行,医院,购物都得排队.排在队首先处理事情,处理完才能从这个队伍离开,又有新的人来排在队尾.但仅仅这样就能满足我们生活需求吗,明显不能. ...
- 数据结构作业——buzhidao(队列)
buzhidao Description 有一个长度为 n 的序列,第 i 个数的大小为 a[i].现在从第 1 个数开始从左往右进行以下操作:1. 如果当前数是剩下的数中最大的,则输出并删去这个数. ...
- 数据结构作业——expectation(树形dp+dfs)
expectation Description 给出一棵带权值的树,我们假设从某个节点出发,到目标节点的时间为两个节点之间的最短路.由于出发节点不好选取,所以选在每个节点都有一定的概率,现在我们要求从 ...
- 数据结构作业——hash(字符串哈希)
Hash Description 给定长度为 n ( n<=1000000)的字符串,字符串仅由小写字母的前 m ( m<=6) 个字符组成,请你计算出共有多少长度为 k( k<=6 ...
- 数据结构作业之用队列实现的基数排序(Java版)
题目: 利用队列实现对某一个数据序列的排序(采用基数排序),其中对数据序列的数据(第1和第2条进行说明)和队列的存储方式(第3条进行说明)有如下的要求: 1)当数据序列是整数类型的数据的时候,数据序列 ...
- 数据结构作业——brothers(二叉树)
brothers Description 给你一棵节点编号从 1 到 n 的,根节点为 1 的二叉树.然后有 q 个询问,每个询问给出一个整数表示树的节点,要求这个节点的兄弟节点数目和堂兄弟节点的数目 ...
- 数据结构作业——sights(最短路/最近公共祖先)
sights Description 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点,由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱的小风姑娘不想走那么 ...
随机推荐
- 一分钟搞定AlloyTouch图片轮播组件
轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹. 除了一般的竖向滚动,AlloyTouch也可以支持横向滚动,甚至 ...
- 移动web开发调试工具AlloyLever介绍
简介 web调试有几个非常频繁的刚需:看log.看error.看AJAX发包与回包.其他的如timeline和cookie以及localstorage就不是那么频繁,但是AlloyLever都支持.如 ...
- 嵌入式:J-link刷固件(坑)
1.上电,短接ERASE,>10秒后,拔USB. 2.短接TST,上电,>10秒后,拔USB. 3.安装驱动.(看别人教程,下载到INF文件,WIN7不能右击安装,好,换虚拟机XP) 4. ...
- Android中使用Notification实现进度通知栏(Notification示例三)
我们在使用APP的过程中,软件会偶尔提示我们进行版本更新,我们点击确认更新后,会在通知栏显示下载更新进度(已知长度的进度条)以及安装情况(不确定进度条),这就是我们今天要实现的功能.实现效果如下: 在 ...
- Jsp的九个内置对象
一.什么是内置对象?在jsp开发中,会频繁使用到一些对象.例如HttSession,ServletContext,HttpServletRequest.如果我们每次要使用这些对象都去创建这些对象,就会 ...
- Junit单元测试
写一个被测试的类 这是类中的一些方法,将一个16进制转化为10进制 reckon()为转化的主要方法,返回结果为10进制数 judge()判断字符是否在0-9,A-F之间,并将字符转化为0-15之中的 ...
- SQL Sever 博客文章目录(2016-07-06更新)
SQL Server方面的博客文章也陆陆续续的写了不少了,顺便也将这些知识点整理.归纳一下下.方便自己和他人查看. MS SQL 数据类型 三大数据库对比研究系列--数据类型 MS SQL 表和视图 ...
- favicon.ico 404
favicon.ico是一个图标文件.就是浏览网站时显示在地址栏的那个图标. 类似是百度的 显示在网站地址最前面的一张图片 可以在网站根目录(TOMCAT_HOME/webapps/ROOT/favi ...
- 0039 Java学习笔记-多线程-线程控制、线程组
join线程 假如A线程要B线程去完成一项任务,在B线程完成返回之前,不进行下一步执行,那么就可以调用B线程的join()方法 join()方法的重载: join():等待不限时间 join(long ...
- JS和ASP.net相互调用问题
项目开发时,我们有时候会遇到后台asp调用前台的JS函数,又或者前台JS需要调用后台aspx.cs的函数,这里记录下如何处理这些问题 1. ASP后台代码中,如果需要运行JS函数,则使用Regist ...