原题网址:
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;
}