UVA - 12100
题意分析:
现在你需要用打印机打印东西,但是打印机前面排起了长队,任务越着急的往前排,问当你用到的时候你是第几个
排队的规则是:当打印机发现队伍里面有比队首的任务更急的任务时,把队首放到队尾,依次。
解题思路:
- 先利用一个优先队列储存,原有队列,表示排列好的队列
- 再用一个由pair储存的队列存储原始列
- 判断pair队首是否和优先队列队首相等,如果相等但是不是原始位置,那么就让优先队列的出队,如果都相等那么就得到答案,如果不相等就把pai队列的队首放队尾。
ac代码:
#include<iostream>
#include<algorithm>
#include<queue>
//#include<pair>
using namespace std;
typedef pair<int,int>PII;
int mp[101];
int main()
{
int t;
cin>>t;
while(t--)
{
queue<PII>qu1;
priority_queue<int>qu2;
int n,st;
cin>>n>>st;
for(int i=0; i<n; i++)
{
int a;
cin>>a;
qu1.push(make_pair(a,i));
qu2.push(a);
}
int cnt=0;
while(!qu1.empty())
{
if(qu1.front().first==qu2.top()&&qu1.front().second!=st)
{
qu2.pop();
cnt++;
}
else if(qu1.front().first==qu2.top()&&qu1.front().second==st)
{
cnt++;
break;
}
else qu1.push(qu1.front());
qu1.pop();
}
cout<<cnt<<endl;
}
}