3709: [PA2014]Bohater
3709: [PA2014]Bohater
或者:Bohater

题解
好狠啊这个题 z 要开 long long ,可能算掉血回血的时候会爆 long long 吧
首先把能回血的怪打死(不然你后面血不够咋办)
打回血怪的顺序按照消耗血量升序排列
然后再考虑杀掉血怪

当我们杀完所有怪物,最后的体力值是确定的
然后我们倒着看,杀掉血怪的时候,我们当做将血瓶吐出来还给掉血怪,然后掉血怪把消耗的血再还给你,然后推回去,看看能不能到达杀回血怪最后的血量巅峰,所以倒着看,处理就和杀回血怪差不多了,倒着看是按照回血量升序,正着看就是降序了

把问题分成两部分:
1.处理回血怪,到达血量巅峰,按照耗血量升序排序
2.处理掉血怪,能不能从血量巅峰不降到0及以下(或者是看看能不能回到血量巅峰),按照回血量从大到小排序(正着看)
好狠啊这个题 z 要开 long long ,可能算掉血回血的时候会爆 long long 吧
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue> using namespace std; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int n,up_num=,down_num=;
long long z;
struct node
{
int d,a,num;
}up[],down[]; bool cmp1(node x,node y)
{
return x.d <y.d ;
} bool cmp2(node x,node y)
{
return x.a >y.a ;
} int main()
{
n=read();z=read();
int x,y;
for(int i=;i<=n;i++)
{
x=read();y=read();
if(x<=y) up[++up_num].num =i,up[up_num].d =x,up[up_num].a =y;
else down[++down_num].num =i,down[down_num].d =x,down[down_num].a =y;
}
sort(up+,up+up_num+,cmp1);
sort(down+,down+down_num+,cmp2);
for(int i=;i<=up_num;i++)
{
if(up[i].d >=z){printf("NIE\n");return ;}
else z=z-up[i].d +up[i].a ;
}
for(int i=;i<=down_num;i++)
{
if(down[i].d >=z){printf("NIE\n");return ;}
else z=z-down[i].d +down[i].a ;
}
printf("TAK\n");
for(int i=;i<=up_num;i++)
printf("%d ",up[i].num );
for(int i=;i<=down_num;i++)
printf("%d ",down[i].num );
return ;
}
Z要开 long long
3709: [PA2014]Bohater的更多相关文章
- BZOJ 3709: [PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1050 Solved: ...
- 【贪心】bzoj 3709:[PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 653 Solved: ...
- 【BZOJ】3709: [PA2014]Bohater(贪心)
http://www.lydsy.com/JudgeOnline/problem.php?id=3709 很水的题...但是由于脑洞小..漏想了一种情况.. 首先显然能补血的先杀.. 然后杀完后从补血 ...
- BZOJ 3709 [PA2014]Bohater:贪心【反过来考虑】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3709 题意: 在一款电脑游戏中,你需要打败n只怪物(从1到n编号). 为了打败第i只怪物, ...
- bzoj 3709: [PA2014]Bohater 贪心
题目: 在一款电脑游戏中,你需要打败\(n\)只怪物(从\(1\)到\(n\)编号).为了打败第\(i\)只怪物,你需要消耗\(d_i\)点生命值,但怪物死后会掉落血药,使你恢复\(a_i\)点生命值 ...
- bzoj 3709: [PA2014]Bohater【贪心】
先打能回血的,按消耗从小到大打: 然后按回血量降序打剩下的(把消耗和回血反着看就是上一种怪,打法一样): 中间体力小于0就输出无解 #include<iostream> #include& ...
- 【BZOJ 3709: [PA2014]Bohater】
首先,这是我n久之前培训的时候老师讲的题目了,今天突然看到,那就讲讲吧. 首先,我们考虑怎么打怪... 显然,我们需要保证这个怪要尽可能的打死(就是尽量不被干死),并且保证尽可能的净获得血量大的在前面 ...
- BZOJ3709: [PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 339 Solved: ...
- [PA2014]Bohater
[PA2014]Bohater 题目大意: 有\(n(n\le10^5)\)只怪物,你的血量为\(z\).要打败第\(i\)只怪物时,你需要先消耗\(d_i\)点生命值,再恢复\(a_i\)点生命值. ...
随机推荐
- hadoop-2.7.3安装kafka_2.11-2.1.0
软件下载: http://mirrors.shu.edu.cn/apache/kafka/2.1.0/kafka_2.11-2.1.0.tgz 把下载好的包kafka_2.11-2.1.0.tgz 上 ...
- beego中获取url以及参数的方式
以下都全默认在controller下执行 获取当前请求的referer fmt.Println(this.Ctx.Request.Referer()) 输出:http://localhost:8080 ...
- Win7系统开机速度慢怎么解决?
Win7系统使用时间长了,我们就会发现电脑的开机启动速度变慢了,其实除了关闭相应的启动项之外,我们还可以对电脑进行相关的系统配置,来使电脑能够更加快速的启动.下面好系统重装助手就来告诉你怎么解决Win ...
- dhcpd.conf配置文件几例
例1 ddns-update-style interim; ignore client-updates; subnet 192.168.222.0 netmask 255.255.255.0 { ...
- STM32 stm32fxxx_flash.icf文件的作用详解
文章转载自:https://blog.csdn.net/weibo1230123/article/details/80142210 每个芯片开发商都会针对每款芯片来编写一个.icf文件就是传说中的链接 ...
- ubantu32位 linux下hexedit的下载安装
Hexedit软件介绍: hexedit是一个开源的完全免费的命令行软件,可用于在任何GNU / Linux操作系统下以十六进制和ASCII(美国信息交换标准代码)格式查看和编辑文件. 下载: 在so ...
- 清除input输入框的历史记录
当之前的input框输入了数据后,下次输入有历史记录问题的解决方法 <input id="vhcl_no" type="text" autocompl ...
- Spring——概念
一.简介 Spring是一个开源的框架,Spring为简化企业级应用开发而生,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能.Spring是一个IOC和AOP容器框架. ...
- 制作自定义系统iso镜像
一.制作自己的ISO启动盘篇 在需要安装特定系统的时候,我们使用原版的linux系统盘镜像来安装,需要手动操作N多步,在机器非常多的环境下,这种方式显然不理想,这是我我们就需要制作我们特定的系统盘来简 ...
- sql条件子查询
https://www.cnblogs.com/wxw16/p/6105624.html select * from mst_crse where crse_cd in (SELECT crse_cd ...