题目链接:
题目大意:
n个石头,每个在位置p,一个属性d。从最左边开始往右走,遇到一个石头,如果是第奇数次遇到,就把他往前仍d米,偶数次遇到就越过。问最后最远的石头距离起点多少米
思路:考虑用优先队列,如果是第奇数个石头,就修改其位置,入队列,否则,出对列;
View Code
1 #include2 #include 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 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 }