首先,这是我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】的更多相关文章

  1. 【贪心】bzoj 3709:[PA2014]Bohater

    3709: [PA2014]Bohater Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 653  Solved:  ...

  2. BZOJ 3709: [PA2014]Bohater

    3709: [PA2014]Bohater Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1050  Solved: ...

  3. BZOJ 3709 [PA2014]Bohater:贪心【反过来考虑】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3709 题意: 在一款电脑游戏中,你需要打败n只怪物(从1到n编号). 为了打败第i只怪物, ...

  4. bzoj 3709: [PA2014]Bohater【贪心】

    先打能回血的,按消耗从小到大打: 然后按回血量降序打剩下的(把消耗和回血反着看就是上一种怪,打法一样): 中间体力小于0就输出无解 #include<iostream> #include& ...

  5. bzoj 3709: [PA2014]Bohater 贪心

    题目: 在一款电脑游戏中,你需要打败\(n\)只怪物(从\(1\)到\(n\)编号).为了打败第\(i\)只怪物,你需要消耗\(d_i\)点生命值,但怪物死后会掉落血药,使你恢复\(a_i\)点生命值 ...

  6. 3709: [PA2014]Bohater

    3709: [PA2014]Bohater 或者:Bohater 题解 好狠啊这个题 z 要开 long long ,可能算掉血回血的时候会爆 long long 吧 首先把能回血的怪打死(不然你后面 ...

  7. 【BZOJ】3709: [PA2014]Bohater(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3709 很水的题...但是由于脑洞小..漏想了一种情况.. 首先显然能补血的先杀.. 然后杀完后从补血 ...

  8. 【Bzoj 1835 基站选址】

    基站选址的区间里隐藏着DP优化的机密…… 分析:       不论是做过乘积最大还是石子合并,或者是其他的入门级别的区间DP题目的人呐,大米并认为读题后就能够轻松得出一个简洁明了的Dp转移方程.    ...

  9. 【BZOJ 2744 朋友圈】

    Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1570  Solved: 532[Submit][Status][Discuss] Descripti ...

随机推荐

  1. TypeScript 和 JavaScript 的区别

    TypeScript 和 JavaScript 是目前项目开发中较为流行的两种脚本语言,我们已经熟知 TypeScript 是 JavaScript 的一个超集.JavaScript 和 TypeSc ...

  2. ubuntu - 如何以root身份使用图形界面管理文件?

    nautilus 是gnome的文件管理器,但是如果不是root账号下,权限受限,我们可以通过以下方式以root权限使用! 一,快捷键“ctrl+alt+t”,调出shell. 二,在shell中输入 ...

  3. Nginx默认配置语法

    Nginx默认配置语法 1. 我们进入  /etc/nginx/目录下,打开  nginx.conf文件 2. 我们来解析下 这里面标签和各模块的作用 # 设置nginx服务的系统使用用户 user ...

  4. 使用CXF开发WebService程序的总结(七):Spring+CXF+Mybatis+Mysql共同打造的服务端示例

    通过该demo,可以 熟悉下 spring+cxf+maven+mybatis+mysql等常见后端技术整合 1. 在前面的 父工程 ws_parent 中 添加依赖 由于原来的项目是使用的cxf依赖 ...

  5. Elasticsearch 7.4.0官方文档操作

    官方文档地址 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 1.0.0 设置Elasticsea ...

  6. Python内部执行过程

    一.编译过程概述 当我们执行Python代码的时候,在Python解释器用四个过程“拆解”我们的代码,最终被CPU执行返回给用户. 首先当用户键入代码交给Python处理的时候会先进行词法分析,例如用 ...

  7. Java文档查看

    对于Java学习者来说,阅读Java文档是必不可少的步骤,比如我现在想知道List接口的retianAll()方法,该怎么办呢? 当然是百度了!!! 皮一下,当然是查找Java文档了,以JDK1.7版 ...

  8. CH5102/SPOJ?? Mobile Service/P4046 [JSOI2010]快递服务[线性dp+卡常]

    http://contest-hunter.org:83/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%80%8D%E4%B ...

  9. poj2279 Mr. Young's Picture Permutations[勾长公式 or 线性DP]

    若干人左对齐站成最多5行,给定每行站多少个,列数从第一排开始往后递减.要求身高从每排从左到右递增(我将题意篡改了便于理解233),每列从前向后递增.每个人身高为1...n(n<=30)中的一个数 ...

  10. Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...