15. 北理工的恶龙

编程入门 行业动态 更新时间:2024-10-18 03:22:43

15. <a href=https://www.elefans.com/category/jswz/34/1745722.html style=北理工的恶龙"/>

15. 北理工的恶龙

 思路:

我们可以将恶龙分为两类,一类是经验值为正数的,一类是负数的,根据贪心原则,收获的经验越多越好,故我们将正负分开存储,将正数部分的武力值从小到大排序,之后我们从小到大打败,如果经验值不够就氪金,之后加上恶龙给的经验值。

对于负数部分来说,我们打完这条龙剩下的经验值必然大于等于这条龙的经验值(负数)加上难度值因此根据贪心原则,剩下的经验值越大就可以氪金越少,故我们按照难度值和经验之和从大到小排序,之后我们从大到小打败,如果经验值不够就氪金,之后加上恶龙给的经验值。

代码:

#include <iostream>  
#include <algorithm>  
using namespace std;  
pair<int,int>p[300010];  
pair<long long,int> st[300010];  
int idx;  
#define x first  
#define y second  
int main()  
{  int n;  cin>>n;  for(int i=1;i<=n;i++){  cin>>p[i].x;  cin>>p[i].y;  }  sort(p+1,p+n+1);  long long k=0;  long long exp=0;  for(int i=1;i<=n;i++){  if(p[i].y>=0){  if(p[i].x>exp)k+=p[i].x-exp,exp=p[i].x;  exp+=p[i].y;  }  if(p[i].y<0){  st[++idx]={p[i].x+p[i].y,i};  }  }   sort(st+1,st+idx+1);  for(int i=idx;i>=1;i--){  int  t=st[i].y;  if(p[t].x>exp)k+=p[t].x-exp,exp=p[t].x;  exp+=p[t].y;  }  cout<<k<<endl;  return 0;  
}  

更多推荐

15. 北理工的恶龙

本文发布于:2024-03-11 14:01:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729136.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:北理工

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!