bzoj 3709: [PA2014]Bohater 贪心
题目:
在一款电脑游戏中,你需要打败\(n\)只怪物(从\(1\)到\(n\)编号)。为了打败第\(i\)只怪物,你需要消耗\(d_i\)点生命值,但怪物死后会掉落血药,使你恢复\(a_i\)点生命值。任何时候你的生命值都不能降到\(0\)(或\(0\)以下)。请问是否存在一种打怪顺序,使得你可以打完这\(n\)只怪物而不死掉
所有数均\(\leq 10^5\)
题解:
首先很明显地要先收掉所有总收益为正的怪物。
顺序的话稍微\(YY\)一下就会发现是按照消耗的生命值从小到大。
那么下面考虑如何收剩下的总收益为负的怪物。
容易发现,如果我们从前往后收怪\(HP\)没有\(\leq 0\)过。
那么这个过程的逆过程也满足这个条件。
所以考虑如果提前取得所有的收益,然后倒着做这个过程。
这样就变成了收掉总收益为正的怪物的部分。
所以按照回复的\(HP\)从小到大收即为逆过程的最有策略。
(由于是逆过程,所以之前的回复即为逆过程的消耗)
所以按照回复的\(HP\)从大到小排序收取即为原过程的最有解。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(ll &x){
x=0;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
#define rg register int
#define rep(i,a,b) for(rg i=(a);i<=(b);++i)
#define per(i,a,b) for(rg i=(a);i>=(b);--i)
const ll maxn = 100010;
struct Node{
ll nd,val,id;
bool vis;
Node(){vis = false;}
Node(const ll &a,const ll &b){
nd = a;val = b;vis = false;
}
}a[maxn];
inline bool cmp1(const Node &a,const Node &b){
return a.nd == b.nd ? a.val > b.val : a.nd < b.nd;
}
inline bool cmp2(const Node &a,const Node &b){
return a.val+a.nd > b.val+b.nd;
}
bool vis[maxn];
ll ans[maxn],cnt;
int main(){
ll n,h;read(n);read(h);
ll x,y;
rep(i,1,n){
read(x);read(y);
a[i] = Node(x,y-x);
a[i].id = i;
}sort(a+1,a+n+1,cmp1);
rep(i,1,n){
if(h > a[i].nd && a[i].val >= 0){
h += a[i].val;
ans[++cnt] = a[i].id;
a[i].vis = true;
}
}
rep(i,1,n) if(a[i].vis == false && h <= a[i].nd){
puts("NIE");return 0;
}
sort(a+1,a+n+1,cmp2);
rep(i,1,n) if(a[i].vis == false){
if(h > a[i].nd){
h += a[i].val;
ans[++ cnt] = a[i].id;
a[i].vis = true;
}else{
puts("NIE");
return 0;
}
}
puts("TAK");
rep(i,1,cnt){
printf("%lld",ans[i]);
if(i != cnt) putchar(' ');
else putchar('\n');
}
return 0;
}
bzoj 3709: [PA2014]Bohater 贪心的更多相关文章
- 【贪心】bzoj 3709:[PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 653 Solved: ...
- BZOJ 3709: [PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1050 Solved: ...
- BZOJ 3709 [PA2014]Bohater:贪心【反过来考虑】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3709 题意: 在一款电脑游戏中,你需要打败n只怪物(从1到n编号). 为了打败第i只怪物, ...
- bzoj 3709: [PA2014]Bohater【贪心】
先打能回血的,按消耗从小到大打: 然后按回血量降序打剩下的(把消耗和回血反着看就是上一种怪,打法一样): 中间体力小于0就输出无解 #include<iostream> #include& ...
- 【BZOJ 3709: [PA2014]Bohater】
首先,这是我n久之前培训的时候老师讲的题目了,今天突然看到,那就讲讲吧. 首先,我们考虑怎么打怪... 显然,我们需要保证这个怪要尽可能的打死(就是尽量不被干死),并且保证尽可能的净获得血量大的在前面 ...
- 3709: [PA2014]Bohater
3709: [PA2014]Bohater 或者:Bohater 题解 好狠啊这个题 z 要开 long long ,可能算掉血回血的时候会爆 long long 吧 首先把能回血的怪打死(不然你后面 ...
- 【BZOJ】3709: [PA2014]Bohater(贪心)
http://www.lydsy.com/JudgeOnline/problem.php?id=3709 很水的题...但是由于脑洞小..漏想了一种情况.. 首先显然能补血的先杀.. 然后杀完后从补血 ...
- 【BZOJ4619/3709】[Wf2016]Swap Space/[PA2014]Bohater 贪心
[BZOJ4619][Wf2016]Swap Space Description 你有许多电脑,它们的硬盘用不同的文件系统储存数据.你想要通过格式化来统一文件系统.格式化硬盘可能使它的容量发生变化.为 ...
- BZOJ 3716 [PA2014]Muzeum 贪心SET最大闭合子图
看上去像是一个最大权闭合子图裸题但是数据太大 我们可以先把守卫的视野转换到第二象限(每个守卫可以看到横坐标比他小 纵坐标比他大的宝物) 然后按X从小到大 再按Y从大到小排 这样我们就可以按SORT序遍 ...
随机推荐
- JQuery 评分系统
评分: ☆ ☆ ☆ ☆ ☆ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- json教程系列(4)-optXXX方法的使用
在JSONObject获取value有多种方法,如果key不存在的话,这些方法无一例外的都会抛出异常.如果在线环境抛出异常,就会使出现error页面,影响用户体验,针对这种情况最好是使用optXXX方 ...
- lambda可调用对象
//find_if谓词使用 bool isShorter(const string &s1, const string &sz){ return s1.size() < sz.s ...
- 数据库系统概论学习4-SQL 语句和关系代数(二)单表查询
4.12 字符匹配 精确查询和模糊查询 在这一节之前,我们学习的查询几乎都是精确查询,这就需要我们明确地知道某些属性的具体值.例如我们需要查询 'Wangxiaoxiao' 同学的信息,就需要在WHE ...
- 用PyDev、eclipse搭建Python开发环境
一 Eclipse for python环境搭建 ①下载原生Eclipse,可以直接百度Eclipse,在百度软件中心下载 ②下载完后,打开软件,选择第一个安装即可 ③安装完成后,打开eclips ...
- springmvc注解基本入门
简单介绍使用springmvc注解的基本流程. 1.在web.xml中配置DispatcherServlet <?xml version="1.0" encoding=&qu ...
- Linux操作系统的安装以及基本的操作命令详解
背景:使用的虚拟机安装Linux 虚拟机使用的是VMware Linux版本:CentOS-6.7-X86 自行下载:CentOS-6.7-x86_64-bin-DVD1.iso 打开VMw ...
- Elasticsearch6.4.3安装
Linux内存一定要1g以上! 首先要有jdk环境 要求1.8版本以上 elasticsearch是Java写的 将上传的 elasticSearch安装包解压 cd /home/elastics ...
- 【bzoj3240 && 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的 ...
- DataX-HDFS(读写)
DataX操作HDFS 读取HDFS 1 快速介绍 HdfsReader提供了读取分布式文件系统数据存储的能力.在底层实现上,HdfsReader获取分布式文件系统上文件的数据,并转换为DataX传输 ...