有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会排到长队的队尾。

输入每个团队中所有队员的编号,要求支持如下3种指令(前两种指令可以穿插进行)

对于每个DEQUEUE指令,输出出队人的编号。

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

Sample
Output

Scenario
#1
101
102
103
201
202
203

Scenario
#2
259001
259002
259003
259004
259005
260001

#include<cstdio>
#include<queue>
#include<map>
using namespace std;
const int maxt=+;
int main()
{
int t,kase=;
while(scanf("%d",&t)==&&t){ //t为团队个数 //开始记录所有人的团队编号
map<int,int>team; //team[x]表示编号为x的人所在的团队编号
for(int i=;i<t;i++){
int n,x;
scanf("%d",&n); //n为该团队的人数
while(n--){
scanf("%d",&x);
team[x]=i;
}
}
printf("Scenario #%d\n",++kase);
//模拟开始!
queue<int>q,q2[maxt]; //q是团队的队列,而q2[i]是团队i成员的队列
while(){
int x;
char cmd[];
scanf("%s",cmd);
if(cmd[]=='S')break;
else if(cmd[]=='D'){
int t=q.front(); //front()调用容器中第一个元素
printf("%d\n",q2[t].front());
q2[t].pop(); //移除队列首元素
if(q2[t].empty())q.pop(); //团体t全体出队列
}
else if(cmd[]=='E'){ //编号为x的人进入队伍
scanf("%d",&x);
int t=team[x]; //t为编号为x的人所在的团队
if(q2[t].empty())q.push(t); //团队t进入队列
q2[t].push(x); //q2[t]为该团队在队伍中的人的队列
}
}
printf("\n");
}
//system("pause");
return ;
}
push()会将一个元素置入queue中。
  • front()会返回queue内的第一个元素(也就是第一个被置入的元素)。
  • back()会返回queue中最后一个元素(也就是最后被插入的元素)。
  • top()取队首元素(但不删除)。
  • pop()会从queue中移除一个元素。
  • 注意:pop()虽然会移除下一个元素,但是并不返回它,front()和back()返回下一个元素但并不移除该元素。

另:

优先队列也定义在头文件<queue>中,用"priority_quene<int> pq"来声明。(越小的整数优先级越低)

由于出队的元素并不是最先进队的元素,出队的方法由front()变为了top().

越小的整数优先级越大的定义方式 "priority_queue<int,vector<int>,greater<int> > pq"

自定义类型也可以组成优先级队列,但必须为每个元素定义一个优先级。

eg.  实现 “个位数的的整数优先级反而小”  ,可以定义一个结构体cmp,重载“()” 运算符,然后用“priority_queue<int,vector<int>,cmp> pq"的方式定义。

下面是cmp的定义

struct cmp{

bool operator() (const int a, const int b)const{                  //a的优先级比b小时返回true

return a%10>b%10;

}

}

queue 之团队队列(摘)的更多相关文章

  1. java-Enumeration,单向队列Queue及双向队列Deque等容器简单使用

    1.Enumeration容器使用: package com.etc; import java.util.Enumeration; import java.util.Vector; /* Enumer ...

  2. python3 Queue(单向队列)

    创建队列 import queue q = queue.Queue() empty(如果队列为空,返回True) import queue q = queue.Queue() print(q.empt ...

  3. collections之deque【双向队列】与Queue【单向队列】

    今天来向大家介绍两个队列,一个是deque,双向队列,另外一个是Queue,单向队列,队列和堆栈不同,队列为先进先出,大家还需要注意一下,双向队列为collections模块中的类,而Queue为qu ...

  4. 映射Map、队列Queue、优先级队列PriorityQueue

    映射Map 将对象映射到其他对象的能力是解决编程问题的有效方法.例如,考虑一个程序,它被用来检查 Java 的 Random 类的随机性.理想情况下, Random 会产生完美的数字分布,但为了测试这 ...

  5. uva 540 - Team Queue(插队队列)

    首发:https://mp.csdn.net/mdeditor/80294426 例题5-6 团体队列(Team Queue,UVa540) 有t个团队的人正在排一个长队.每次新来一个人时,如果他有队 ...

  6. 团队队列(列和map结合的经典运用)

    Queues and Priority Queues are data structures which are known to most computer scientists. The Team ...

  7. 【UVA - 540】Team Queue (map,队列)

    Team Queue Descriptions: Queues and Priority Queues are data structures which are known to most comp ...

  8. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  9. C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)

    前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...

随机推荐

  1. uvA Flooded!

    Description To enable homebuyers to estimate the cost of flood insurance, a real-estate firm provide ...

  2. (原)下载pubFig的python代码

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5715305.html pubFig数据库网址: http://www.cs.columbia.edu/ ...

  3. 一个有趣的问题——MySQL中varchar的最大长度

    明明维护了一个1k的最小堆,可是输出到MySQL里却只有九百多行数据. 查log,发现这么一段内容: stderr logs com.mysql.jdbc.MysqlDataTruncation: D ...

  4. JavaScript this 局部变量全局变量 作用域 作用域链 闭包

    从阮老师博客的一道测试题说起: 代码段一: var name = "The Window"; var object = { name : "My Object" ...

  5. shell练习--用户下载交互检测

    #!/bin/bash #By spinestars #-- read -p "请输入下载目录路径" down_dir read -p "请输入网址路径" ur ...

  6. robot自动化测试(二)--- template使用

    首先贴一下测试结构 测试流程: 1.打开百度主页 2.搜索框输入搜索内容 3.获取浏览器title 4.验证title的正确性 百度搜索业务关键字:采用分层结构:只需输入要搜索的内容:${search ...

  7. Red and Black(poj 1979 bfs)

    Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 27891   Accepted: 15142 D ...

  8. pm2安装及常用命令

    安装:npm install -g pm2 启动程序:pm2 start <app_name|id|all> 列举进程:pm2 list 退出程序:pm2 stop <app_nam ...

  9. [TYVJ] P1049 最长不下降子序列

    最长不下降子序列 描述 Description 求最长不下降子序列的长度   输入格式 InputFormat 第一行为n,表示n个数第二行n个数   输出格式 OutputFormat 最长不下降子 ...

  10. KL25用SPI操作nor flash

    KL25的SPI连接一个nor flash.该flash型号为FM25F04,支持SPI的模式0和模式3,要求高位先发送,在上升沿采集数据. 通常,SPI有4种模式,取决于CPOL与CPHA如何配置. ...