【BZOJ 3709: [PA2014]Bohater】
首先,这是我n久之前培训的时候老师讲的题目了,今天突然看到,那就讲讲吧。
首先,我们考虑怎么打怪。。。
显然,我们需要保证这个怪要尽可能的打死(就是尽量不被干死),并且保证尽可能的净获得血量大的在前面
但是我们注意到,题目十分友好的说出了我们只需用输出一种方案就行
所以考虑最边界的情况(即贪心)
贪心,对于怪兽可以分成两类:
一类,打完之后血量不降反升,这些怪兽按照消耗血量从小到大排序;
一类,打完之后血量不升反降,这些怪兽按照恢复血量从大到小排序。
血量上升怪一定排在血量下降怪前面,易知这种打怪顺序是最优的。
最后就只需要检验每一步是否满足《活着》就可以了QwQ
千万要注意:z开long long!!
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int a=,b=;
char c=getchar();
while(!isdigit(c))
{
if(c=='-')
b=-;
c=getchar();
}
while(isdigit(c))
{
a=(a<<)+(a<<)+(c^);
c=getchar();
}
return a*b;
}
struct demons
{
int id,good,bad;
}very_good[],very_bad[];
int n,good_num,bad_num;
long long z;
bool cmp1(demons a,demons b)
{
return a.good>b.good;
}
bool cmp2(demons a,demons b)
{
return a.bad<b.bad;
}
int main()
{
n=read(),z=read();
for(int i=;i<=n;i++)
{
int a=read(),b=read();
if(b>=a)
very_good[++good_num].id=i,very_good[good_num].bad=a,very_good[good_num].good=b;
else
very_bad[++bad_num].id=i,very_bad[bad_num].bad=a,very_bad[bad_num].good=b;
}
sort(very_good+,very_good+good_num+,cmp2);
sort(very_bad+,very_bad+bad_num+,cmp1);
for(int i=;i<=good_num;i++)
{
if(very_good[i].bad>=z)
{
printf("NIE\n");
return ;
}
else
z=z-very_good[i].bad+very_good[i].good;
}
for(int i=;i<=bad_num;i++)
{
if(very_bad[i].bad>=z)
{
printf("NIE\n");
return ;
}
else
z=z-very_bad[i].bad+very_bad[i].good;
}
printf("TAK\n");
for(int i=;i<=good_num;i++)
printf("%d ",very_good[i].id);
for(int i=;i<=bad_num;i++)
printf("%d ",very_bad[i].id);
return ;
}
【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\)只怪物(从\(1\)到\(n\)编号).为了打败第\(i\)只怪物,你需要消耗\(d_i\)点生命值,但怪物死后会掉落血药,使你恢复\(a_i\)点生命值 ...
- 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 很水的题...但是由于脑洞小..漏想了一种情况.. 首先显然能补血的先杀.. 然后杀完后从补血 ...
- 【Bzoj 1835 基站选址】
基站选址的区间里隐藏着DP优化的机密…… 分析: 不论是做过乘积最大还是石子合并,或者是其他的入门级别的区间DP题目的人呐,大米并认为读题后就能够轻松得出一个简洁明了的Dp转移方程. ...
- 【BZOJ 2744 朋友圈】
Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1570 Solved: 532[Submit][Status][Discuss] Descripti ...
随机推荐
- angular使用@angular/material 出现"export 'ɵɵinject' was not found in '@angular/core'
WARNING in ./node_modules/@angular/cdk/esm5/a11y.es5.js 2324:206-214 "export 'ɵɵinject' was not ...
- xml_SAX解析
(一)SAX解析 1.1 SAX解析 SAX:基于事件处理的机制 sax解析xml文件时,遇到根开始标签,根结束标签,开始解析文件,文件解析结束,字符内容,空白字符等都会触发各自的方法. 优点: 适合 ...
- SecureCRT 连接 Centos7.0 (NAT模式),且能连接公网。
1.打开物理主机运行-输入cmd,输入ipconfig,获取物理主机ip地址. ip:192.168.11.138 2.点击网络适配器,选择NAT模式. 3.点击Centos界面左上角-编辑-虚拟网络 ...
- stm32 development
1.www.st.com st官网 2.www.stmcu.com.cn st中文网 3.www.stmcu.org.cn st中文社区
- openstack Rocky系列之keystone:(一)keystone的启动
keystone在httpd的入口执行文件为/usr/bin/keystone-wsgi-public 查看文件/usr/bin/keystone-wsgi-public,根据代码,看到主要是这几行代 ...
- CTF基本常识
参照百度百科: https://baike.baidu.com/item/Pwn/5321286?fr=aladdin ”Pwn”是一个黑客语法的俚语词 [1] ,是指攻破设备或者系统 [2] . ...
- eclipse编码格式(中文乱码)
https://jingyan.baidu.com/article/2009576193ee38cb0721b416.html 修改工作空间默认编码 1 进入Eclipse,导入一个项目工程,如果项目 ...
- nicstat命令安装与分析
nicstat安装包下载与安装: wget https://downloads.sourceforge.net/project/nicstat/nicstat-1.95.tar.gz tar -zxv ...
- The Preliminary Contest for ICPC Asia Shenyang 2019 C. Dawn-K's water
题目:https://nanti.jisuanke.com/t/41401思路:完全背包 #include<bits/stdc++.h> using namespace std; int ...
- k8sConfigMap资源
ConfigMap对象用于为容器中的应用提供配置数据以定制程序的行为,不过敏感的配置信息,例如密钥.证书等通常由Secret对象来进行配置.他们将相应的配置信息保存于对象中,而后在pod资源上以存储卷 ...