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. IIS服务器和xampp中的appche服务器端口冲突解决办法

    今天在启动xampp中的appche的时候,发现以前能起来的现在起不来了.想到可能是最近配置的系统自带的IIS服务器把appche的端口给占用了. (appche和iis的默认端口号都是:80:) 问 ...

  2. C# Session添加、删除封装类

    /// <summary> /// <para> </para> /// 常用工具类——Session操作类 /// <para> ---------- ...

  3. Java输入输出常用类Scanner

    Scaner类,使用获取键盘输入. public boolean DemoTest(){ Scanner input = new Scanner(System.in); System.out.prin ...

  4. webstorm官网最新版激活:

    2016.2.3版本的破解方式:目前最新的就是2.3版本,在打开的License Activation窗口中选择"activation code",在输入框输入下面的注册码:3B4 ...

  5. 【转】漫谈iOS程序的证书和签名机制

    转自:漫谈iOS程序的证书和签名机制 接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕 ...

  6. Android自定义ViewGroup

    视图分类就两类,View和ViewGroup.ViewGroup是View的子类,ViewGroup可以包含所有的View(包括ViewGroup),View只能自我描绘,不能包含其他View. 然而 ...

  7. 解决adobe air sdk打包 apk后自动在包名前面加上air. (有个点)前缀的问题

    早就找到了这个方法,但是一直忙没心思写博客. 默认情况下,所有 AIR Android 应用程序的包名称都带 air 前缀.若不想使用此默认行为,可将计算机环境变量 AIR_NOANDROIDFLAI ...

  8. Allocators与Criterion的相同点及区别

    C++98: 1.相同点: Allocators having the same type were assumed to be equal so that memory allocated by o ...

  9. js动态绑定click事件时function传参问题

    今天碰到了这样一个问题,我在javascript中动态创建了一个button, 然后我想给改button添加click事件,绑定的function想要传入一个变量参数, 一开始我想直接通过函数传参传进 ...

  10. JAVA编程思想(第四版)学习笔记----11.5 List,11.6迭代器

    Collection类的层次结构图(来源与网络)如下所示: 接口:Iterator<T> public interface Iterable<T> Iterable<T& ...