NYOJ-754黑心医生

来源:互联网 发布:产业数据直报系统 编辑:程序博客网 时间:2024/04/28 14:19

点击打开题目链接

一道简单的模拟题,思路很简单,用一个队列和一个优先队列分别存储数据,优先队列用来确定当前病人中最有钱的病人。当前病人不是最有钱的人时就移动到队列的末端,否则就删除对首元素。

#include <iostream>#include <cstdio>#include <queue>//#define LOCALusing 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;}


原创粉丝点击