題目是: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 }