UVA 540 Team Queue

UVA 540 Team Queue

题目描述

有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么这个
新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会排到长队的队尾。
输入每个团队中所有队员的编号,要求支持如下3种指令(前两种指令可以穿插进
行)。
ENQUEUEx:编号为x的人进入长队。
DEQUEUE:长队的队首出队。
STOP:停止模拟。

输入样式

Sample Input
2
3 101 102 103
3 201 202 203
ENQUEUE 101
ENQUEUE 201
ENQUEUE 102
ENQUEUE 202
ENQUEUE 103
ENQUEUE 203
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
STOP
2
5 259001 259002 259003 259004 259005
6 260001 260002 260003 260004 260005 260006
ENQUEUE 259001
ENQUEUE 260001
ENQUEUE 259002
ENQUEUE 259003
ENQUEUE 259004
ENQUEUE 259005
DEQUEUE
DEQUEUE
ENQUEUE 260002
ENQUEUE 260003
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
STOP
0

输出样式

Scenario #1
101
102
103
201
202
203
Scenario #2
259001
259002
259003
259004
259005


知识补充:C++ stl queue

  1. queue是一种先进先出的数据类型
  2. 常见操作
q.push();
q.pop();
q.front();
q.empty();
q.back();
q.size();

代码实现

//摘自刘汝佳
#include
#include
#include

using namespace std;
const int [maxn]=1000+10;
int main(){
    int t,n,case;
    while(scanf("%d",&t)==1&&t){
        printf("Scenario #%d\n", ++case);
        map team;
        while(t--){
            scanf("%d",&n);
            for(int i=0;i q,q2[maxn];
        for(;;){
        scanf("%s",cmd);
        if(cmd[0]=='s')
        break;
        if(cmd[0]=='D'){
            int s=q.front();
            printf("%d",q2[s].front());
            q2.pop();
            if(q2[t].empty)
            q.pop();
        }
        if(cmd=='E'){
            int m;
            scanf("%d",&m);
            t=team(m); 
            if(!empty(q2(t)))
            q2.push(m);
            else
            q.push(m);  
        }
        printf("\n");
    }
}
    return 0;
}

By制杖菜鸡

你可能感兴趣的:(UVA 540 Team Queue)