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

 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 }
时间: 2024-12-17 10:58:55

UVA 12100 Printer Queue(队列和优先队列,水)的相关文章

UVa: 12100 - Printer Queue

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3252 题目描述:有一些文件需要打印机打印,每个人物有不同的优先级(1-9),打印机的运作方式为:首先从打印队列里取出一个任务J,如果队列里有比J更急的任务,则直接把任务放到打印队列的尾部,否则打印任务J.输入打印队列中各个任务的优先级以及所关注的任务在队列中的位置(对首位置为0).

UVa 12100 Printer Queue (习题 5-7)

传送门:https://uva.onlinejudge.org/external/121/12100.pdf 题意:队列中待打印的任务(1 <= n <= 100)带有优先级(1-9), 打印步骤为每次从队首拿出一个, 如果队列中没有优先级比该任务高的, 打印这个任务; 若有优先级高的, 把这个任务放到队尾,  并打印优先级最高的. 每打印一次耗时1分钟, 求给定任务什么时候打印. 水题A半天    不愧是弱渣.......... 最坏的情况需要maxn*maxn的空间........ fro

12100 Printer Queue(优先队列)

12100 Printer Queue12 The only printer in the computer science students’ union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs in the printer queue and you may have to wait for hours to get a single page of output. Bec

UVa 12110 Printer Queue(特殊队列)

题意  模拟打印队列   队列中有优先级大于队首的元素   队首元素就排到队尾  否则队首元素出队  输出开始在p位置的元素是第几个出队的 直接模拟这个过程就行了 #include <bits/stdc++.h> using namespace std; const int N = 205; int q[N]; int main() { int cas, n, p, cnt, front, rear, i; scanf("%d", &cas); while(cas-

poj 3125 Printer Queue (队列)

 Printer Queue Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3679   Accepted: 1975 Description The only printer in the computer science students' union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs i

C++ Primer 学习笔记_11_标准模板库_stack、queue队列容器与priority_queue优先队列容器

C++ Primer 学习笔记_11_标准模板库_stack.queue队列容器与priority_queue优先队列容器 1.stack堆栈 stack堆栈是一个后进先出(Last In First Out,LIFO)的线性表,插入和删除元素都只能在表的一端进行.插入元素的一端称为栈顶,而另一端称为栈底.插入元素叫入栈(Push),删除元素叫出栈(Pop).下图是堆栈示意图 堆栈只提供入栈,出栈,栈顶元素访问和判断是否为空等几种方法.采用push()方法将元素入栈:采用pop()方法出栈:采用

POJ 3125 Printer Queue 数据结构 队列

Printer Queue Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4329   Accepted: 2269 Description The only printer in the computer science students' union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs in t

UVa12100,Printer Queue

水题,1A过的 数据才100,o(n^3)都能过,感觉用优先队列来做挺麻烦的,直接暴力就可以了,模拟的队列,没用stl #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <queue> #define maxn 100+5 using namespace std; int mid[maxn],v[maxn],q[maxn*maxn

UVA 11573 - Ocean Currents【BFS+优先队列】

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2620 题意:给定一个海面,数字分别代表海流方向,顺着海流不用费能量,逆海流要费1点能量,每次询问给一个起点一个终点,问起点到终点耗费的最小能量 思路:广搜,队列用优先队列,每次取能量最低的点. 代码: #include <stdio.h> #include <