您的位置:首页 > 产品设计 > UI/UE

UVa 12100 - Printer Queue【队列和优先队列】

2016-01-08 14:32 337 查看
原题网址:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=836&page=show_problem&problem=3252
题目说的是,有一些打印任务,每次只打印这些中最重要的,如果当前任务不是最重要的,就放在队尾,现在指定某一位置的一个任务,问什么时候把指定任务打印完成(打印每个需要 1 )

题解:

用的优先队列判断是否是最大的那个值,其实不需要优先队列,只是顺手了而已,然后注意标记上自己的任务,无脑循环模拟。

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct node
{
int val,kase;
bool friend operator < (node a,node b)
{
return a.val<b.val;
}
};
int main()
{
int t,n,m;
//freopen("shuju.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
priority_queue<node> pq;
queue<node> q;
int val,kase;
for(int i=0;i<n;++i)
{
scanf("%d",&val);
kase=(m==i)?1:0;
node tp={val,kase};
pq.push(tp);
q.push(tp);
}
int time=0;
while(1)
{
node a=pq.top(),b=q.front();
while(a.val!=b.val)
{
q.push(b);
q.pop();
a=pq.top(),b=q.front();
}
++time;
pq.pop();q.pop();
if(b.kase==1)
{
printf("%d\n",time);
break;
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: