题意:输入一组数据,每个元素都有优先级,优先级从1到9.计算出当目标任务完成后,所需要的时间
思路:如果第一个元素的优先级不是最高,就将这个元素放到队列末,如果其优先级最高,但不是目标任务的话,就将其删掉,时间就+1,如果是目标任务的话,就输出时间
#include<stdio.h>
#include<queue>
#include<stdlib.h>
#include<algorithm>
using namespace std;
struct job{
job(int i, int k)//初始化,相当于构造函数
{
id = i;
v = k;
}
int id, v;
};
int main(){
int a;
scanf("%d", &a);
while(a--){
int n, value;
int a[105];
queue<job> jobs;
scanf("%d %d", &n, &value);
for(int i = 0; i < n; i++){
int t;
scanf("%d", &t);
jobs.push(job(i, t));
a[i] = t;
}
sort(a, a + n);
int p = n - 1;
int cnt = 0;
while(true){
if(jobs.front().v == a[p]){//判断队列头的任务的等级是否位最高
if(jobs.front().id == value){//判断是否跟指定的位置相同
printf("%d\n", ++cnt);
break;
}
else{
cnt++;
jobs.pop();//将队列头删除
p--;
}
}
else{
jobs.push(jobs.front());//将队列头放到队尾
jobs.pop();
}
}
while(!jobs.empty())
jobs.pop();
}
return 0;
}