【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 ...
随机推荐
- CSS行高——line-height 垂直居中等问题
CSS行高——line-height 初入前端的时候觉得CSS知道display.position.float就可以在布局上游刃有余了,随着以后工作问题层出不穷,才逐渐了解到CSS并不是几个sty ...
- Linux下nouveau操作和GPU的操作,nouveau拯救
之前也提到了,旧机器上有一块NVIDIA的显卡,装了ubuntu16.04后一直没有安装驱动.这周算是有点时间,就差点作了死. 首先必须澄清,这个不是正确的安装过程,起码我就报了memory erro ...
- appium基础之简单的小例子
appium环境搭建了,当然也要开始用起来了,记录一下学习的过程 遇到问题 1.The permission to start '.ui.home.view.HomeActivity' activit ...
- AngularJs 初级入门 学习笔记
刚学angular, 做一些笔记方便自己翻看. ng-app: 填写模块的名称 ng-init: 初始化数据(一般通过控制器初始化) ng-model: 填写数据模型 ng-bind: 绑定数据模型, ...
- 快速入门 Pandas
先po几个比较好的Pandas入门网站十分钟入门:http://www.codingpy.com/article/a-quick-intro-to-pandas/手册前2章:http://pda.re ...
- 64位Win7安装Oracle12C临时位置权限错误解决方案
今天装备安装Oracle12C体验一下,结果遇到问题:请确保当前用户具有访问临时位置所需的权限,无法继续安装,上网查了一下,解决方案如下: 第一步: 控制面板>所有控制面板项>管理工具 ...
- linux svn 安装
1.环境centos6.4 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /var/www/svndata svnserve -d -r /va ...
- js最简单焦点图片轮播代码
将下面代码保存为banner.js,在需要显示焦点图的地方调用该js即可. <script type="text/javascript" src="banner.j ...
- Codeforces 837E Vasya's Function 数论 找规律
题意:定义F(a,0) = 0,F(a,b) = 1 + F(a,b - GCD(a,b).给定 x 和 y (<=1e12)求F(x,y). 题解:a=A*GCD(a,b) b=B*GCD(a ...
- php核心:代际划分/运行环境等
不想在python一棵树上吊死,不是所有Python就一定得会人工智能大数据,so...... 何谓php?早期:personel homepage 是也!后期Hypertext preprocess ...