前言:一道经典贪心题。

--------------------------

题目链接

题目大意:你有$z$滴血,要打$n$只怪。打第$i$只怪扣$d_i$滴血,回$a_i$滴血。问是否存在一种能够通关的打怪顺序。

-------------------------------

显然所有怪分为两种:扣血的怪$d_i>a_i$和回血的怪$d_i\leq a_i$。那么贪心策略是什么?

对于回血的怪,我们有若干贪心策略,例如:

1.按照$d_i$升序排列。

2.按照$a_i$降序排列。

3.按照$a_i-d_i$降序排列

$\cdots$

我们选择第一种。打个形象的比喻:假如你砍它一秒一刀$999999999$,但是它一秒一刀砍你$99999999$,你有$9999999$滴血,那显然会挂。所以我们只能从零开始打怪生活。

对于扣血的怪,我们是按照$a_i$降序排列。理由很简单:反正怎么都是扣血,我们还不如先把回血多的怪打了。反正如果你通不了关,那无论什么顺序都没有用。

在输入的时候讲怪进行分类,分别处理即可。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,z;
struct node
{
int id,d,a;
}add[],kou[];
int addcnt,koucnt;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if (ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=x* +ch-'';ch=getchar();}
return x*f;
}
bool cmp1(node a,node b)
{
return a.d<b.d;
}
bool cmp2(node a,node b)
{
return a.a>b.a;
}
int main()
{
n=read(),z=read();
for (int i=;i<=n;i++)
{
int b=read(),c=read();
if (c>=b){add[++addcnt]=(node){i,b,c};}
else{kou[++koucnt]=(node){i,b,c};}
}
sort(add+,add+addcnt+,cmp1);
sort(kou+,kou+koucnt+,cmp2);
for (int i=;i<=addcnt;i++)
{
if (add[i].d>=z) {cout<<"NIE";return ;}
else z=z-add[i].d+add[i].a;
}
for (int i=;i<=koucnt;i++)
{
if (kou[i].d>=z) {cout<<"NIE";return ;}
else z=z-kou[i].d+kou[i].a;
}
cout<<"TAK"<<endl;
for (int i=;i<=addcnt;i++) cout<<add[i].id<<" ";
for (int i=;i<=koucnt;i++) cout<<kou[i].id<<" ";
return ; }

最新文章

  1. 浅谈Margin和Padding值设置成百分数的布局
  2. js闭包详解
  3. 套接字IO超时设置和使用select实现超时管理
  4. vb.net三层实现登录例子
  5. Android IOS WebRTC 音视频开发总结(四三)-- 诚信交易案例分享
  6. 编写高效的Android代码
  7. Golang学习 - 学习资源列表
  8. UNIX网络编程——常用服务器模型总结
  9. yum安装指定版本的软件包的方法
  10. 一套代码小程序&amp;Web&amp;Native运行的探索01
  11. termux
  12. [十二省联考2019]异或粽子 01trie
  13. Android直接用手机打包apk!
  14. 一个ner的bug
  15. windows程序设计 vs2012 新建win32项目
  16. Spark_RDD之RDD基础
  17. CentOS7中使用阿里云镜像
  18. RenderSprite小记
  19. wget 用法
  20. sql中的一些函数(长期更新。。)

热门文章

  1. 蜂鸟E203系列——Linux开发工具
  2. python读取EXCEL是去掉空白行和表头全部重命名
  3. 还能这么玩?用VsCode画类图、流程图、时序图、状态图...不要太爽!
  4. 龙芯开源社区上线.NET主页
  5. 在Java中使用AES加密
  6. 静态代理,动态代理和CGLIB代理模式
  7. Flutter 快捷开发 Mac Android Studio 篇
  8. Java开发中的eclispe常用快捷键&amp;全部快捷键
  9. Ethical Hacking - Web Penetration Testing(4)
  10. Java常用开源库