Gym 100247I Meteor Flow(优先队列)
https://vjudge.net/problem/Gym-100247I
题意:
有一艘飞船,现在有n颗流星坠落会攻击到飞船,每颗流星会在t时刻降落,对飞船造成d的伤害,飞船会有一个保护盾,初始值为0,每单位时间会+1,受到伤害后保护盾会减去相应的值。飞船上面还有加农炮,发射后可以避免一颗流星的伤害,问在保护盾不受到破坏的情况下(<0)最少需要发射几次加农炮。
思路:
尽量使用加农炮去避免伤害较大的流星。
按照时间顺序将所有流星的伤害值依次放入优先队列,如果到某颗流星时保护盾遭到破坏了,那么就从优先队列中取出之前的伤害最大的流星,此时用加农炮免除它的伤害。
1 #include<cstdio> 2 #include<queue> 3 using namespace std; 4 const int maxn = 200000+5; 5 6 int n; 7 8 priority_queue<int> q; 9 10 int main() 11 { 12 //freopen("in.txt","r",stdin); 13 scanf("%d",&n); 14 int pre = 0; 15 int ans = 0; 16 int defend = 0; 17 for(int i=1;i<=n;i++) 18 { 19 int t,d; 20 scanf("%d%d",&t,&d); 21 q.push(d); 22 defend += t-pre; 23 pre = t; 24 while(defend < d) 25 { 26 int tmp = q.top(); q.pop(); 27 defend += tmp; 28 ans++; 29 } 30 defend -= d; 31 } 32 printf("%d\n",ans); 33 return 0; 34 }
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步