您的位置:首页 > 其它

hdu 1896 优先队列的应用

2013-03-06 09:39 225 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896

题目大意:

n个石头,每个在位置p,一个属性d。从最左边开始往右走,遇到一个石头,如果是第奇数次遇到,就把他往前仍d米,偶数次遇到就越过。问最后最远的石头距离起点多少米

思路:考虑用优先队列,如果是第奇数个石头,就修改其位置,入队列,否则,出对列;

View Code

#include<iostream>
#include<queue>
using namespace std;

struct Point{
int pos;
int dis;
bool operator < (const Point  p) const {
if(p.pos!=pos)
return p.pos<pos;
return p.dis<dis;
}
};

priority_queue<Point>Q;

int main(){
int _case;
scanf("%d",&_case);
while(_case--){
int n;
scanf("%d",&n);
while(!Q.empty())Q.pop();
Point p,q;
while(n--){
scanf("%d%d",&p.pos,&p.dis);
Q.push(p);
}
int result=0,count=1;
while(!Q.empty()){
if(count&1){
q=Q.top();
Q.pop();
q.pos+=q.dis;
result=q.pos;
Q.push(q);
}else
Q.pop();
count++;
}
printf("%d\n",result);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: