码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 12100 Printer Queue(队列和优先队列,水)

时间:2016-05-02 10:31:02      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

 1 //#include<bits/stdc++.h>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef long long ll;
 7 /**
 8 题意:所有任务在队列中,若当前打印的任务优先级不是最大,则移动到队列尾部。问下标为k的任务在什么时刻被打印;
 9 思路:用优先队列判断优先级是否最高。用队列模拟任务
10         (1)若队列前面的任务 不是 优先级最高
11                 任务移到末尾
12                 下标k-- (若 k = 0 , k = queue.size()-1 )
13         (2)若队列前面的人物  是 优先级最高
14                 打印任务。
15                 若下标k == 0 输出答案
16                 若k!=0   k-1 , time++;
17 
18 */
19 int n,index;
20 
21 void solve(){
22     int ans = 1;
23     priority_queue<int> pq;
24     queue<int> que;
25     for(int i = 0 ; i < n ; i ++){
26         int tmp;
27         scanf("%d",&tmp);
28         que.push(tmp);
29         pq.push(tmp);
30     }
31     for(;;){
32         if(que.front() == pq.top()){
33             if(index == 0){
34                 printf("%d\n",ans);
35                 break;
36             }else{
37                 que.pop();
38                 pq.pop();
39                 index --;
40             }
41             ans ++;
42         }else{
43             int tmp =  que.front();
44             que.pop();
45             que.push(tmp);
46             if(index == 0) index = que.size() - 1;
47             else index --;
48         }
49     }
50 }
51 
52 int main(){
53 
54     int T;
55     scanf("%d",&T);
56     while(T--){
57         scanf("%d%d",&n,&index);
58         solve();
59     }
60     return 0;
61 }

 

UVA 12100 Printer Queue(队列和优先队列,水)

标签:

原文地址:http://www.cnblogs.com/zstu-jack/p/5451944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!