UVA 12100 Printer Queue

本文介绍了一种使用普通队列和优先队列解决打印队列中特定位置元素所需总时间的算法。通过比较队列前端元素与优先队列顶部元素的优先级,决定是否进行打印或重新安排元素顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:求关注位置的元素被打印后,所花费的总时间。

思路:

  用一个普通队列 p 和优先队列 pq 存优先级,因为优先队列队首肯定是要被打印的元素;

  如果p,pq队首相等,表示可以打印,不然就丢到后面去。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<vector>
 5 using namespace std;
 6 
 7 
 8 int n;
 9 int main()
10 {
11     cin >> n;
12     while (n--)
13     {
14         int m,pos;
15         cin >> m>>pos;
16         queue<int> q;
17         priority_queue<int>pq;
18         for (int i = 0; i < m; i++)
19         {
20             int level;
21             cin >> level;
22             q.push(level);
23             pq.push(level);
24         }
25 
26         int cnt = 0,index=0;//花费的时间和当前的下标
27         while (true)
28         {
29             if (q.front() == pq.top())//当前优先级最高,可以打印
30             {
31                 if (index == pos)//得到结果
32                 {
33                     cnt++;
34                     cout << cnt << endl;
35                     break;
36                 }
37                 else
38                 {
39                     cnt++;
40                     q.pop();
41                     pq.pop();
42                     index++;
43                 }
44             }
45             else//不等把当前扔到最后面
46             {
47                 int cur = q.front();
48                 q.push(cur);
49                 q.pop();
50                 if (index == pos)
51                 {
52                     pos = q.size() - 1;
53                     index = 0;
54                 }
55                 else
56                 {
57                     index++;
58                 }
59             }
60         }
61     }
62     return 0;
63 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值