前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HDU 1896 优先队列用法

HDU 1896 优先队列用法

作者头像
杨鹏伟
发布2020-09-11 13:04:26
3180
发布2020-09-11 13:04:26
举报
文章被收录于专栏:ypw

题意:就是一条直线上面有很多石头。石头有初始位置跟能扔的距离,如果是奇数石头,那么就扔,否则,就在原位置不管。问最远石头距离起点的位置是多少。

思路:对于这个题目,偶数石头我们就不管了,奇数石头我们需要再次使用的,那么我们很容易想到优先队列。

代码语言:javascript
复制
#include <bits/stdc++.h>

using namespace std;

struct node{
    int pos,dis;
    friend bool operator<(node a,node b){
        if(a.pos!=b.pos)
        return a.pos>b.pos;//最小值优先
        else return a.dis>b.dis;
    }
};
int main(){
    int t;
    while(cin>>t){
        while(t--){
            int n;
            cin>>n;
            
            priority_queue<node>q;
            
            node a,b;
            
            for(int i=0;i<n;i++){
                int c,d;
                cin>>c>>d;
                a.pos=c;
                a.dis=d;
                q.push(a);
            }
            
            int z=0;
            int sum=0;
            
            while(!q.empty()){
                z++;
                a=q.top();
                sum=a.pos;
                if(z%2==0){
                    q.pop();
                }
                else{
                    b.pos=a.pos+a.dis;
                    b.dis=a.dis;
                    q.pop();
                    q.push(b);
                }
            }
            cout<<sum<<endl;
        }
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档