题目大意:按照要求设置一个队列,然后进行排队和出队,排队是有优先级的
解体思路:用一个解构体,存储数字和优先级
#include<cstdio>
#include<cstring>
#include<cstdlib>
struct queue{
int number;
int mark;
};
int main() {
int test;
int ci = 1;
while(scanf("%d", &test) != EOF) {
queue q[100000];//存储传入的数字
int count = 0;//记录存放了多少个数字
if(test == 0)//为0时跳出循环
break;
printf("Scenario #%d\n", ci);
for(int i = 0; i < test; i++) {//循环test个队列
int num;
scanf("%d", &num);
for(int j = 0; j < num; j++) {//读取一个队列中的数
long long temp;
scanf("%lld", &temp);
q[count].number = temp;
q[count].mark = i;
count++;
}
}
queue que[100000];
int rear = 0, front = 0;
char str[1000];
while(scanf("%s", str) && str[0] != 'S') {//读取命令
if(str[0] == 'E') {
int n;
queue mark;
scanf("%d",&n);
int num = 0 ;
int m = 1;
for(int i = 0; i < count; i++)
if(q[i].number == n)
mark = q[i];// 找到mark属于哪个队列
int j;
for( j = rear - 1; j >= front; j--) {
if(que[j].mark == mark.mark) {
num = j;
break;
}
}
if(j < front) {//没找到自己所在的队列
que[rear++] = mark;
}
else {
for(int k = rear - 1; k > num; k--)
que[k+1] = que[k];
que[num+1] = mark;
rear++;
}
}
else {
printf("%d\n", que[front].number);
front++;
}
}
ci++;
printf("\n");
}
return 0;
}