UVa12100 Printer Queue (打印队列)


                  12100  Printer Queue


Input

   One line with a positive integer  the number of test cases(at most 100).  Then for each test case:

   • One line with two integers n and m, where n is the number of jobs in the queue (1≤n≤100)

And m is the position of your job (0≤m≤n−1). The first position in the queue is number 0,

the second is number 1,and soon.

    One line with n integers in the range 1 to 9, giving the priorities of the jobs in the queue. The

first integer gives the priority of the first job, the second integer the priority of the second job,

and soon.

 

Output

For each test case,print one line with a single integer;the number of minutes until your job is completely

printed,as suming that no additional print jobs will arrive.

 

Sample Input

3

1 0

5

4 2

1 2 3 4

6 0

1 1 9 1 1 1

 

Sample Output

1

2

5


My Solution

#include <iostream>
#include <deque>

using namespace std;
bool compar(const deque<int> &de)
{
    int cot=0;

    for(int i=1;i<de.size();i++) //最后一次比较是比较到最后一个的前一个和最后一个
/*!              ^^^^^^^^^^^ 轮到的这个和后面所有的分别比较*/
    {
        if(de[0]>=de[i]) cot++;   //从第二个开始跟它比
    }
    if(cot==de.size()-1) return true;  //这里完美的把单个元素的集合包含进去了
    else return false;
}

int main()
{
    deque<int> priqu;
    int T=0,n,place,tem,time;
    cin>>T;
    while(T--){
        cin>>n>>place;
        priqu.clear();
        for(int i=0;i<n;i++){
            cin>>tem;
            priqu.emplace_back(tem);
        }
        time=0;
        int gol=place;
        while(gol>-1){  //对于本来就在首位i的就不对了,故不是gol>0而是>-1
            int i=priqu[0];
          //priqu.pop_front();必须放里面
            gol--; //******因为下面这里要用到
            int siz0=priqu.size();
            if(compar(priqu)) {
                time++;      //打印才要时间哦
                priqu.pop_front();
                continue;
            }
            else {
                priqu.pop_front();
                priqu.emplace_back(i);
                if(gol==-1) gol+=siz0;  //!应当是==-1的时候才加,所以加个size()就好了,刚好等于size()-1
            }
        }
        cout<<time<<endl;
    }
    return 0;
}


谢谢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值