一道简单的模拟题,思路很简单,用一个队列和一个优先队列分别存储数据,优先队列用来确定当前病人中最有钱的病人。当前病人不是最有钱的人时就移动到队列的末端,否则就删除对首元素。
#include <iostream>
#include <cstdio>
#include <queue>
//#define LOCAL
using namespace std;
int main()
{
#ifdef LOCAL
freopen("Input.txt","r",stdin);
freopen("Output1.txt","w",stdout);
#endif
int n,no;
while(~scanf("%d%d",&n,&no))
{
queue<int>q;
priority_queue<int>v;
int temp;
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
q.push(temp);
v.push(temp);
}
while(1)
{
temp=q.front();
q.pop();
if(no == 0)
{
if(temp != v.top())
{
q.push(temp);
no=v.size()-1; //如果此时该病人不是最富有的,则将排到队伍的最后面
}
else break;
}
else
{
no--; //每一次处理,要询问的病人的位置将相应的向前移一位
if(temp == v.top())
v.pop();
else q.push(temp);
}
}
printf("%d\n",n-q.size()); //总人数减去剩下的人数就是看过的病人的人数
}
return 0;
}