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序遍 ...
随机推荐
- PAT 天梯赛 L1-026. I Love GPLT 【水】
题目链接 https://www.patest.cn/contests/gplt/L1-026 AC代码 #include <iostream> #include <cstdio&g ...
- 小程序学习第二天 认识框架WXML
一.初级小程序HelloWorld 心得: (1)progect.config.json :app的个性化设置 (2)一个小程序至少包括两个文件 (2.1)app.json 小程序全局配置 ...
- 【Tech】CAS多机部署Server和Java Client端
昨天尝试把cas的java client端部署到另外一台机器,结果就有问题了.(localhost部署cas server和java client端参见:http://www.cnblogs.com/ ...
- bowtie2用法
bowtie2的功能:短序列的比对 用法:bowtie2 [options]* -x <bt2-idx> {-1 <m1> -2 <m2> | -U <r&g ...
- String和StringBuilder、StringBuffer
Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder String 只读字符串,这里的只读并不是指String类型变量无法被修改,而是指String类 ...
- vRO 添加已有磁盘到VM
在vRO实现将已有虚拟机磁盘添加到另外的虚拟机上,以为vRA发布Oracle/SQL集群做准备: // 脚本需要两个输入 vm_obj和diskPathSystem.log("Attempt ...
- Prometheus Monitoring System & Time Series Database
什么是 TSDB (Time Series Database): 我们可以简单的理解为.一个优化后用来处理时间序列数据的软件,并且数据中的数组是由时间进行索引的. 时间序列数据库的特点: 大部分时间都 ...
- linux 查看各目录(文件夹)下文件大小
# 显示总大小(/下全部文件占用大小) du -sh /* | sort -nr # 显示各文件夹的大小(当前文件夹下各文件夹的大小) du --max-depth=1
- 偏远小渔村选手的noip2017游记
这次noip估计是我初中最后一次比赛了,毕竟初三狗还要准备中考,要是中考挂了就GG了. 在最终成绩的榜上,我看到我成绩400,非常意外(你们这群大佬赛前天天奶我,还好不是毒奶),更意外的是全省竟然只有 ...
- java基础(6)-集合类2
泛型 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型,参数化类型,把类型当做参数一样的传递 好处: 1)把运行时期的问题提前到了编译器期间 2)避免了强制类型转换 3 ...