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

思路

要求需要的最少饥渴次数,我们可以换个角度,每杀死一个英雄,就获得一次使用饥渴技能的机会,那么每次在血量没有的时候,从杀死的英雄中选出血量值最多的英雄即可。

 AC代码
#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(优先队列)的更多相关文章

  1. 数据结构作业——Sanji(优先队列)

    山治的婚约 Description 我们知道,山治原来是地下有名的杀人家族文斯莫克家族的三子,目前山治的弟弟已经出现,叫做四治,大哥二哥就叫汪(One)治跟突(Two)治好了(跟本剧情无关) .山治知 ...

  2. 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)

    ギリギリ eye Description A.D.1999,由坠落地球的“谜之战舰”带来的 Over Technology,揭示了人类历史和远古文明之间的丝丝联系, 促使人类终止彼此间的战争,一方面面 ...

  3. Java数据结构之堆和优先队列

    概述 在谈堆之前,我们先了解什么是优先队列.我们每天都在排队,银行,医院,购物都得排队.排在队首先处理事情,处理完才能从这个队伍离开,又有新的人来排在队尾.但仅仅这样就能满足我们生活需求吗,明显不能. ...

  4. 数据结构作业——buzhidao(队列)

    buzhidao Description 有一个长度为 n 的序列,第 i 个数的大小为 a[i].现在从第 1 个数开始从左往右进行以下操作:1. 如果当前数是剩下的数中最大的,则输出并删去这个数. ...

  5. 数据结构作业——expectation(树形dp+dfs)

    expectation Description 给出一棵带权值的树,我们假设从某个节点出发,到目标节点的时间为两个节点之间的最短路.由于出发节点不好选取,所以选在每个节点都有一定的概率,现在我们要求从 ...

  6. 数据结构作业——hash(字符串哈希)

    Hash Description 给定长度为 n ( n<=1000000)的字符串,字符串仅由小写字母的前 m ( m<=6) 个字符组成,请你计算出共有多少长度为 k( k<=6 ...

  7. 数据结构作业之用队列实现的基数排序(Java版)

    题目: 利用队列实现对某一个数据序列的排序(采用基数排序),其中对数据序列的数据(第1和第2条进行说明)和队列的存储方式(第3条进行说明)有如下的要求: 1)当数据序列是整数类型的数据的时候,数据序列 ...

  8. 数据结构作业——brothers(二叉树)

    brothers Description 给你一棵节点编号从 1 到 n 的,根节点为 1 的二叉树.然后有 q 个询问,每个询问给出一个整数表示树的节点,要求这个节点的兄弟节点数目和堂兄弟节点的数目 ...

  9. 数据结构作业——sights(最短路/最近公共祖先)

    sights Description 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点,由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱的小风姑娘不想走那么 ...

随机推荐

  1. getting started with transformjs

    Introduction In the past two years, more and more friends for mobile web development have used the t ...

  2. [deviceone开发]-openPage的动画效果示例

    一.简介do_App的openPage支持16种过场动画,这个示例直观的展示16种动画的效果.适合初学者.二.效果图三.相关下载https://github.com/do-project/code4d ...

  3. ArcGIS Engine开发之书签加载

    ArcGIS中书签是保存特定视图范围的快捷方式.使用书签保存关注的视图范围,可在需要时快速定位.查看与浏览.书签功能主要用到IMapBookmarks.ISpatialBookmark和IAOIBoo ...

  4. 用Kotlin语言重新编写Plaid APP:经验教训(I)

    原文标题:Converting Plaid to Kotlin: Lessons learned (Part 1) 原文链接:http://antonioleiva.com/plaid-kotlin- ...

  5. DataView详解

    dataview可以用于对你的datatable筛选,搜索,排序,编辑和导航.可以方便对databale的操作. 先来看一下它有哪些属性: 接下来是方法: 我们怎么使用它呢? public datat ...

  6. android 之 启动画面的两种方法

    现在,当我们打开任意的一个app时,其中的大部分都会显示一个启动界面,展示本公司的logo和当前的版本,有的则直接把广告放到了上面.启动画面的可以分为两种设置方式:一种是两个Activity实现,和一 ...

  7. 在VMware上安装VMTools

    1. 什么是VMtools VM tools顾名思义就是Vmware的一组工具(关于如何在虚拟机上安装Linux,可以参考我之前的博文:http://www.cnblogs.com/libingbin ...

  8. 强大的flash头像上传插件(支持旋转、拖拽、剪裁、生成缩略图等)

    今天介绍的这款flash上传头像功能非常强大,支持php,asp,jsp,asp.net 调用 头像剪裁,预览组件插件. 本组件需要安装Flash Player后才可使用,请从http://dl.pc ...

  9. yii2实战教程之新手入门指南-简单博客管理系统

    作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...

  10. 分享一下Java写的坦克大战游戏,相信很多人小时候玩过

    写在前面 程序是五六年前读书的时候写的,里面会有一些不规范的,我已经将代码传到github上了,有时间会优化修改. 程序运行机制 定义了一个JPanel,然后每隔一小段时间重绘一遍. 重绘的内容如下: ...