hdu 1896 優先隊列的應用

題目連接:http://acm.hdu.edu.cn/showproblem.php?pid=1896php

題目大意:ios

n個石頭,每一個在位置p,一個屬性d。從最左邊開始往右走,遇到一個石頭,若是是第奇數次遇到,就把他往前仍d米,偶數次遇到就越過。問最後最遠的石頭距離起點多少米ide

思路:考慮用優先隊列,若是是第奇數個石頭,就修改其位置,入隊列,不然,出對列;spa

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 }
相關文章
相關標籤/搜索