UVa12100

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef pair<int,int>Pll;

void clear(queue<Pll>& Q){
            queue<Pll> empty;
            swap(empty, Q);
}

int main()
{
    freopen("in.txt","r",stdin);
    queue<Pll>Q;
    int Time = 0,x,T,n,m,Last,a[100];
    int *ad;
    scanf("%d",&T);
    while(T--){
         Time = 0;
         clear(Q);
         scanf("%d%d",&n,&m);
         Last = m+1;
         for(int i = 1 ; i<=n ; i++){
                scanf("%d",&x);
                a[i-1]=x;
                Pll p = make_pair(x,i);
                Q.push(p);
         }
         sort(a,a+n,greater<int>());
         ad = &a[0];
         for(;;){
              if(Q.front().first!=*ad){
                    Q.push(Q.front());
                    Q.pop();
              }else{
                    Time++;
                    ad++;
                    x = Q.front().second;
                    if(x==Last) break;
                    else  Q.pop();
              }
         }
         printf("%d\n",Time);
    }
    return 0;
}

/*
知识点:
      思想: 先按照n个数字的顺序,把数字压入队列queue< pair<x,i> >Q中,然后根据第二个数字m+1知道我们要打印的数字
                 为多少并存储在int Last中;  将输入的n个优先级传入数组int Py[n],再sort(py,py+n,greater<int>() )一下,根据优先级
                 的顺序从大到小排列,设置指针int &p = a; 如果Q.front().first!=*p,Q.push(Q.front()),Q.pop(); 如果队列第一个pair
                 的first值==*p,那么....(具体代码已给出)
      
      注意: 因为队列中没有可以清空队列的函数,所以我们自己造一个
*/

猜你喜欢

转载自blog.csdn.net/m0_37632283/article/details/81533127
今日推荐