题目链接:点击查看

题目大意:给出一个土球,初始时的稳定性为m,现在需要撞击n个障碍,每撞击掉第i个障碍物后,会降低a[i]的稳定性,但会增加b[i]的稳定性,若土球的稳定性小于0,则会直接散架,问能否在让土球按照一定次序撞击掉所有木块后仍然不散架

题目分析:直接贪心即可,我们设c为b-a,也就是撞击第i个障碍物后对土球的贡献值,显然当c大于0的时候,我们需要优先撞击这些障碍物,撞击的次序肯定是优先撞击a较小的,但当c为非正数我们该怎么办呢,一开始我想的是按照a的降序排序,因为c对土球的贡献为负,所以每次土球的稳定性肯定越来越小,所以趁着稳定性比较大的时候,将可以撞掉的障碍物都撞掉即可,但这个贪心策略并不是最优的,随便出一组数据就可以hack掉:

2 11

10 1

9 8

显然答案应该是YES,我们先选择第二个障碍,然后再选择第一个障碍,但如果按照a降序来选择的话,那么返回的答案应该是NO,又仔细思考了一下,就感觉要应该按照b的降序排序了,因为c一定是非正数,所以a一定大于等于b,如果按照b降序排序的话,这也就大体限制了a的范围,但如果按照a降序排序的话,就无法限制b的范围了(只知道b小于a),其实也可以换个角度,假设按照上述规则排好序的障碍物都可以依次击破,那么每次击破后的稳定性至少为b,因为b是可以对稳定性贡献一个正数的存在,按照b递减排序的话,也正是和稳定性m递减的趋势相同,但如果采取对于a递减排序的话,就无法得到这个结论了

大概就是这样一个贪心策略吧,我也证不太明白,不过自己写几组数据总是可以看出来的嘛

一个小破题卡了我一个小时。。以为m没开longlong,忘记计算最大上限了,若给出的数据的n为5e5,每次的a都是0,b都是1e5,那么答案肯定就爆掉int了,所以一直只通过了80%的样例,自闭了一个小时,还害的zx学长也陪着我一直debug

这个题目真的无力吐槽了,考贪心就考贪心呗,为什么出这种恶心人的数据卡人,难顶

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=5e5+100;LL n,m;struct Node
{int a,b,c;void cal(){c=b-a;}bool operator<(const Node& t)const{if(c*t.c<0)return c>t.c;else if(c>0)return a<t.a;elsereturn b>t.b;}
}a[N];bool check()
{for(int i=1;i<=n;i++){m-=a[i].a;if(m<0)return false;m+=a[i].b;}return true;
}int main()
{
//  freopen("input.txt","r",stdin);
//    ios::sync_with_stdio(false);int w;cin>>w;while(w--){scanf("%lld%lld",&n,&m);for(int i=1;i<=n;i++){scanf("%d%d",&a[i].a,&a[i].b);a[i].cal();}sort(a+1,a+1+n);if(check())printf("Yes\n");elseprintf("No\n");}return 0;
}

牛客 - 「土」巨石滚滚(贪心)相关推荐

  1. 牛客 - 「火」皇家烈焰(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串表示扫雷游戏,其中: 0:这个格子没有烈焰,且其左右两个格子均没有烈焰 1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰 2:这个格子没有烈焰,且其左右 ...

  2. 暑假每日算法学习打卡(十)----[HNOI2003]激光炸弹,「土」秘法地震(二维前缀和),Captcha Cracker【牛客】

    [HNOI2003]激光炸弹 题目描述  一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标. 现在地图上有n(N ≤ 10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目 ...

  3. 牛客 华华听月月唱歌 贪心

    https://ac.nowcoder.com/acm/contest/392/A 链接:https://ac.nowcoder.com/acm/contest/392/A 来源:牛客网 题目描述 月 ...

  4. 牛客网【每日一题】5月18日 「土」秘法地震

    链接: 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 ...

  5. 「牛客网C」初学者入门训练BC139,BC158

  6. 「牛客网C」初学者入门训练BC156

  7. 2021牛客多校10 - Train Wreck(贪心)

    题目链接:点击查看 题目大意:给出一个合法的括号序列,再给出 nnn 个数字,括号序列对应着入栈和出栈,问是否存在一个合法的顺序,使得 nnn 个数字按照括号序列操作后,每次入栈后,栈中的序列都是不同 ...

  8. 牛客 - umi和弓道(几何+贪心)

    题目链接:点击查看 题目大意:在一个二维平面上,给出一个初始点 P ,接下来给出 n 个点当做靶子,现在初始节点会射击每个靶子,我们可以进行的操作是在 x 轴或 y 轴上建造一段连续长度的木板,使得初 ...

  9. 【Nowcoder】牛客小白月赛26 H 保卫家园 | 贪心、扫描线

    emmm-考试周一天一套小白月赛保持手感- 别问为什么,怕被太难的题卡的挂科- 本来不想写什么题解,不过这题确实有妙处,就记录一下吧 题目大意: 为了抵御深渊的蔓延,被深渊毁掉家园的人们组建法兰不死队 ...

最新文章

  1. [No000039]操作系统Operating Systems用户级线程User Threads
  2. 如何使用 Spinnaker 和 Kubernetes 进行数据库变更发布?
  3. als算法参数_Spark2.0协同过滤与ALS算法介绍
  4. 使用ShareSDK完成第三方(QQ、微信、微博)登录和分享
  5. 数据结构之二叉树的遍历
  6. Apple Mac OS X每日一技巧016:MacBook电源线如何缠绕
  7. [luogu5008]逛庭院
  8. Opencv 中 Mat中元素的值读取方法总结
  9. 初期学习K60遇到的常见问题及解决办法
  10. SSD1306 OLED驱动芯片 详细介绍
  11. 对于注塑模具设计的原则,这些核心你掌握了吗?
  12. SolidWorks频繁闪退,可能是(百度)输入法引起的
  13. 钉钉小程序之Page文件介绍
  14. 苹果手机怎么连接蓝牙耳机_「科技犬」除了苹果AirPods,真无线蓝牙耳机到底怎么选?_蓝牙耳机...
  15. 【Beta】Scrum Meeting 7 与助教谈话
  16. C#中ref和out关键字的应用以及区别。
  17. 论文阅读笔记:(2021.06, cvpr) Monocular 3D Object Detection: An Extrinsic Parameter Free Approach
  18. 菜鸟教程html左侧菜单栏,CSS 导航栏
  19. edge浏览器什么相当于ie的中低_Win10 Edge浏览器和IE浏览器哪个好用?
  20. 重庆计算机本科分数线是多少,重庆市2017年高考分数线公布

热门文章

  1. Spring 工厂的相关的方法
  2. 序列化技术的选型-选型建议
  3. 初步认识Volatile-MESI优化带来的可见性问题
  4. MyBatis创建SqlSession-有没有更好的拿到SqlSessionTemplate 的方法?
  5. TCP/IP协议的深入分析
  6. 体验Lambda表达式【理解】
  7. 搭建项目前端页面环境
  8. 代码演示:获取锁时被中断
  9. JDBC详解系列之流程
  10. mysql 秒杀 隔离级别_MySQL 四种隔离级别详解,看完吊打面试官