1. 程式人生 > >UVA 12100 打印隊列(STL deque)

UVA 12100 打印隊列(STL deque)

bsp -1 優先級 break 位置 for mes ifd cond

題意:

給定n個優先級打印隊列,然後從0開始編號到n-1。出隊一個元素,如果他是隊列中優先級最高的,打印(耗時一分鐘),否則放到隊尾(不耗時)。給定一個m,求位置m的文件打印的時間。

分析:

用一個priority_queue去尋找優先級最高的元素,然後用一個deque<pair<int,int> >去模擬隊列 pair第一個元素是優先級, 第二個是序號。 如果第一元素跟優先級相同,就出隊,否則出隊後插入隊尾。

(其實這題用queue也可以,不過deque好處是可以在隊頭插入,而且速度不慢)

 1 #include <bits/stdc++.h>
 2 using
namespace std; 3 typedef pair<int, int > PII; 4 int n, m; 5 int main() 6 { 7 ios::sync_with_stdio(false); 8 #ifdef LOCAL 9 freopen("1.txt","r",stdin); 10 #endif // LOCAL 11 int t; 12 cin >> t; 13 while(t--) 14 { 15 cin>>n>>m; 16 priority_queue<int
,vector<int>, less<int> > pq; 17 deque<PII> dq;//pair第一個是優先級 第二個是序號 18 int pos = 0; 19 for(int i = 0 ; i < n; i++) 20 { 21 int p; 22 cin>>p; 23 pq.push(p); 24 dq.push_back(make_pair(p,pos)); 25 pos++;
26 } 27 int res = 0; 28 int print = 0; 29 while(1) 30 { 31 int top = pq.top(); 32 pq.pop(); 33 while(dq.front().first!= top) 34 { 35 PII f = dq.front(); 36 dq.pop_front(); 37 dq.push_back(f); 38 } 39 if(dq.front().second == m) 40 { 41 ++res; 42 break; 43 } 44 else 45 { 46 dq.pop_front(); 47 ++res; 48 } 49 } 50 cout << res << "\n"; 51 } 52 53 }

UVA 12100 打印隊列(STL deque)