题目是:HDU1896php
题目简述:输入一堆石头,每一个石头有本身所在的位置p,以及本身能够抛多远的距离d。你每遇到第奇数个石头,就把石头丢出去,第偶数个石头就无论。计算出最后一个石头它所处的位置。html
解法:该题我采起的是先用优先队列对石头进行排序,而后再对每一个石头进行处理,奇数石头就计算出石头的新位置在插进队列去,偶数石头就删除,最后所剩的石头的位置就是所求的位置。node
Σ( ̄。 ̄ノ)ノ好久没敲代码。。。。优先队列都快忘记怎么写了。。。。复习一下:优先队列ios
头文件:ide
#include <queue>函数
基本操做:spa
empty() 若是队列为空返回真3d
pop() 删除对顶元素code
size() 返回优先队列中拥有的元素个数htm
top() 返回优先队列对顶元素
在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。
声明方式:
一、普通方法:
二、自定义优先级:
三、结构体声明方式:
1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 using namespace std; 5 6 struct node 7 { 8 friend bool operator < (node n1,node n2) 9 { 10 if(n1.p!=n2.p) return n1.p>n2.p; 11 else return n1.d>n2.d; 12 } 13 int p,d; 14 }; 15 16 priority_queue<node> q; 17 18 int main() 19 { 20 int n,m,number; 21 node x; 22 scanf("%d",&n); 23 while(n--) 24 { 25 scanf("%d",&m); 26 int i; 27 for(i=0;i<m;i++) 28 { 29 scanf("%d%d",&x.p,&x.d); 30 q.push(x); 31 } 32 i=1; 33 while(!q.empty()) 34 { 35 if(i%2) 36 { 37 x=q.top(); 38 q.pop(); 39 x.p+=x.d; 40 q.push(x); 41 } 42 else 43 { 44 number=q.top().p; 45 q.pop(); 46 } 47 i++; 48 } 49 cout<<number<<endl; 50 } 51 return 0; 52 }