计算机科学学生会中唯一的打印机正经历着极其繁重的工作量。有时,打印机队列中有100个作业,您可能需要等待数小时才能获得一页输出。由于某些作业比其他作业更重要,黑客将军为打印作业队列发明并实现了一个简单的优先级系统。现在,为每个作业分配1到9之间的优先级(9是最高优先级,1是最低优先级),打印机的操作如下。
•从队列中取出队列中的第一个作业J。
•如果队列服务器托管网中有某个作业的优先级高于作业J,则将J移至
不打印队列。
•否则,打印作业J(不要将其放回队列中)。
通过这种方式,黑客将军正在打印的所有重要松饼食谱都被打印出来了
迅速地当然,其他人正在打印的那些令人讨厌的学期论文可能需要等待很长时间
有时间印刷,但这就是生活。
你对新政策的问题是,确定何时打印变得相当棘手
这项工作将实际完成。你决定写一个程序来解决这个问题。该计划将
获得当前队列(作为优先级列表)以及作业在队列中的位置,以及
然后必须计算打印作业所需的时间,假设没有其他作业
将添加到队列中。为了简化问题,我们假设打印作业总是需要
一分钟,从队列中添加和删除作业是即时的。
输入
一行带正整数:测试用例的数量(最多100个)。然后,对于每个测试用例:
•一行包含两个整数n和m,其中n是队列中的作业数(1≤n≤100)
m是你工作的位置(0≤m≤n−1)。队列中的第一个位置是数字0,
第二个是数字1,依此类推。
•一行包含1到9范围内的n个整数,给出队列中作业的优先级。这个
第一个整数给出第一个作业的优先级,
等等
输出
对于每个测试用例,用一个整数打印一行;工作完成前的分钟数
打印,假设没有其他打印作业到达。
Sample Input
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1
Sample Output
1
2
5
思路
用一个结构体队列储存打印任务,结构体成员有优先级q和自己任务的标记m;用一个优先队列储存任务的优先级。读入任务,将自己的任务的m标记为true,其余任务的m标记为false。将任务的结构体放进任务队列,任务的优先级放进优先队列。
如果任务队列队头任务的优先级p与优先队列队头相等,则打印该任务,时间time增加1,让任务队列和优先队列队头出队。如果打印的任务是自己的任务,则输出时间,结束循环。如果任务队列队头任务的优先级p与优先队列队头不相等,则不打印该任务,将任务队列队头放回任务队列队尾后出队。重复该过程直到自己的任务被打印。
AC代码
#include
#include
#include
#define AUTHOR "HEX9CF"
using namespace std;
int t;
struct S
{
int p;
bool m;
};
int main()
{
cin >> t;
while (t--)
{
int n, m;
bool mine = false;
int task;
int time = 0;
queue q;
priority_queue pq;
cin >> n >> m;
for (int i = 0; i > task;
if (i == m)
{
mine = true;
}
else
{
mine = f服务器托管网alse;
}
q.push(S{task, mine});
pq.push(task);
}
while (1)
{
if (pq.top() == (q.front()).p)
{
time++;
if ((q.front()).m)
{
cout
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
CSS 属性计算过程 你是否了解 CSS 的属性计算过程呢? 有的同学可能会讲,CSS属性我倒是知道,例如: p{ color : red; } 上面的 CSS 代码中,p 是元素选择器,color 就是其中的一个 CSS 属性。 但是要说 CSS 属性的计算…