题目链接:http://poj.org/problem?id=3125
题意:给出一串打印的优先级,如果打印当前点i但是后面有比他优先级高的,那么将i点放到最后。如果后面没有比当前点优先级高的,则打印。已知打印耗时1,移动是瞬时完成的。求打印p时的时间。
思路:使用队列queue模拟,直接按照题意进行模拟。
#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;
struct JOB{
int pri;
bool sign;
}job[101];
int prio[101];
bool cmp(int a,int b){
return a>b;
}
int main ()
{
int t,n,m;
cin>>t;
while(t--)
{
queue<JOB>q;
JOB j;
memset(job,0,sizeof(struct JOB)*101);
cin>>n>>m;
job[m].sign=1;
for(int i=0;i<n;i++){
cin>>prio[i];
job[i].pri=prio[i];
q.push(job[i]);
}
sort(prio,prio+n,cmp);
int time=0,sq=0;
while(!q.empty()){
if(q.front().pri!=prio[sq]){
j=q.front();
q.pop();
q.push(j);
}
else{
time++;
sq++;
j=q.front();
q.pop();
if(j.sign==1) break;
}
}
cout<<time<<endl;
}
}