题目大意: 模拟打印机, 取出打印机队列的首个,判断在队列中是否有比它更紧急的任务要处理,若是有,将它插入到队尾(凭什么?!) ,若是没有,打印它。输出到打印目标打印完成的时间。
题目大意就是主要思路。
其实可以再开个优先级队列一起模拟的。
#include<iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
struct node
{
int id,m;
int step;
friend bool operator < (node a,node b)
{
return a.m < b.m;
}
node(int a,int b,int c = 0)
{
id = a; m = b;
}
node(){}
}no[1005];
bool vis[1005];
int main()
{
int t;
cin >> t;
while(t--)
{
memset(vis,0,sizeof(vis));
queue<node > q;
int n,m;
cin>>n>>m;
int te;
for(int i = 0; i < n; i++)
{
cin >> te;
q.push(node(i,te));
no[i].id = i; no[i].m = te;
}
int num = 0;
while(!q.empty())
{
node temp = q.front();
int flag = 1;
for(int i = 0; i < n; i++)
if(no[i].m > temp.m && !vis[no[i].id])
{flag = 0;break; }
if(!flag)
{
q.pop(); q.push(temp);
}
else
{
q.pop(); num++; vis[temp.id] = 1;
}
if(flag && temp.id == m)
{
cout<<num<<endl;
}
}
}
return 0;
}