#include<iostream>
#include<algorithm>
#include<stack>
#include<queue>
#include<stdio.h>
using namespace std;
class node{
public:
int x;
bool flag;
node(int i,bool f):x(i),flag(f){
}
};
node* a[110];
int n,m;
void pai(){ //这个函数是模拟题目的操作,即每次对队头的一个元素进行判断,若他的后面有priority比他高的元素,那么他就掉到队尾,否则不移动。
int i,j; //最后得到先后顺序都固定的数组。由于下标为m的元素,用flag==true标记了,所以只要找到他,得到他的下标,就知道要花费的时间。
for(i=0;i<n-1;){ //这里操作的是数组类似于实现队列的思想。不过没有灵活利用数据结构。这里实际上可以用queue代替,更容易理解和编程。
for(j=i+1;j<n;j++){
if(a[i]->x<a[j]->x){ //这里将元素调到数组末尾要实现插入数据,用数组效率低,还好输入规模不大。这里可以用链表替代来实现。
node* temp=a[i];
int k=i+1;
for(;k<n;k++){
a[k-1]=a[k];
}
a[n-1]=temp;
break;
}else{
if(j==n-1)
i++;
}
}
}
}
int main(){
int t;
cin>>t;
while(t--){
int i;
cin>>n>>m;
int x;
for(i=0;i<n;i++){
cin>>x;
if(i==m){
a[i]=new node(x,true);
}else{
a[i]=new node(x,false);
}
}
pai();
for(i=0;i<n;i++){
if(a[i]->flag){
cout<<(i+1)<<endl;
break;
}
}
}
return 0;
}
Printer Queue
最新推荐文章于 2022-09-19 09:24:04 发布