Sicily 1443. Printer Queue (队列)

题目:http://soj.me/1443

   根据priority决定打印的顺序,若priority不是最高,则排在队列最后面

思路:基本队列操作 模拟法

  

#include <iostream>
#include <cstdlib>
#include <queue>

using namespace std;

int arr[105];
int p[105];

struct jobs
{
    int priority;
    bool target;
}job[100];

int cmp(const void *a,const void *b)
{
    return *((int *)b)-*((int *)a);
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        queue<jobs> q;
        int n,m;
        cin>>n>>m;
        for(int i=0;i<n;i++)
        {
            cin>>p[i];
            job[i].priority=p[i];
            if(i==m) job[i].target=true;
            else job[i].target=false;
            q.push(job[i]);
        }
        qsort(p,n,sizeof(int),cmp);
        int maxi=0;
        int ans=0;
        while(true)
        {
            if(q.front().target&&q.front().priority==p[maxi]) break; 
            if(p[maxi]==q.front().priority)
            {
                q.pop();
                maxi++;
                ans++;
            }
            else
            {
                jobs temp;
                temp=q.front();
                q.pop();
                q.push(temp);
            }
        }
        cout<<ans+1<<endl;
    }
    return 0;
}

 

posted @ 2013-01-25 14:20  Daniel Qiu  阅读(202)  评论(0编辑  收藏  举报