您的位置:首页 > 其它

hdu 1896 优先队列的应用

2014-05-26 17:52 295 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896

题目大意:

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

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




View Code

1 #include<iostream>
2 #include<queue>
3 using namespace std;
4
5 struct Point{
6     int pos;
7     int dis;
8     bool operator < (const Point  p) const {
9         if(p.pos!=pos)
10             return p.pos<pos;
11         return p.dis<dis;
12     }
13 };
14
15 priority_queue<Point>Q;
16
17 int main(){
18     int _case;
19     scanf("%d",&_case);
20     while(_case--){
21         int n;
22         scanf("%d",&n);
23         while(!Q.empty())Q.pop();
24         Point p,q;
25         while(n--){
26             scanf("%d%d",&p.pos,&p.dis);
27             Q.push(p);
28         }
29         int result=0,count=1;
30         while(!Q.empty()){
31             if(count&1){
32                 q=Q.top();
33                 Q.pop();
34                 q.pos+=q.dis;
35                 result=q.pos;
36                 Q.push(q);
37             }else
38                 Q.pop();
39             count++;
40         }
41         printf("%d\n",result);
42     }
43     return 0;
44 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: