题目大意:

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

样例输入:

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
260001

本题的难点:

难点1:如何判断新进队的队员是哪个团队的,
难点2:判断出ta是哪个团队的后,判断该团队最后一个人在哪。

解决办法:

1、利用map的映射关系建立一个索引。 key值是每个团队的编号,value是该团队下队员的编号,key对value是一对多的关系。
2、建立队列q,二维队列q2(相当于很多行队列),q存储团队编号, q2[i]存储编号为i的团队下队员的编号。
这样一来,如果是入队:对新进队员判断时, 若新队员编号为i,则map[i]就是团队的编号, 只需将新队员入队q2[map[i]]中即可(该团队最后一个位置)。
如果是出队:则q.top()为队列头部团队, q2[q.top()].pop()表示将最靠前团队中最前面的队员出队

核心思想:

利用map的映射特性做二维队列索引

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxt = 1000 + 10;               //防止溢出
int main() {int t, kase = 0;while(cin >> t && t) {           //t个团队 cout << "Scenario #" << ++kase << endl;map<int, int> team;           //key是团队编号,value是个人编号 for(int i = 0; i < t; i++) {//输入每个团队队员编号 int n, x; cin >> n;while(n--) { cin >> x; team[x] = i; }   //建立索引 }queue<int> q, q2[maxt];       //q是团队队列,q2[i]是团队i成员的队列for(;;) {int x;char cmd[10];  cin >> cmd;if(cmd[0] == 'S') break;else if(cmd[0] == 'D') {int t = q.front();cout << q2[t].front() << endl; q2[t].pop(); if(q2[t].empty()) q.pop();      //团体t全体出队列 } else if(cmd[0] == 'E') {cin >> x;int t = team[x];if(q2[t].empty()) q.push(t);   //团队t进入队列q2[t].push(x); } }  cout << endl; }return 0;
}

结语:

没有良好的代码设计,是无法发挥STL的威力的,如果没有想到“map做索引”这个思路,就很难用map简化代码。
map的另一个用法可以参考我的这篇博文(map做桥梁连接三种STL容器)→例题5-5 集合栈计算机 UVa12096


如果对你有帮助的话,留个赞再走叭 Thanks♪(・ω・)ノ

日拱一卒,功不唐捐

解题报告——例题 5-6团体队列(Team Queue UVa 540)——31行代码解决相关推荐

  1. uva 540 (Team Queue UVA - 540)

    又是一道比较复杂的模拟题.题中有两种队列,一种是总队列,从前向后.其他的是各个团体的小队列,因为入队的人如果有队友的话,会优先进入团体队列. 所以我们先设置两个队列和一个map,设置map倒是可以不用 ...

  2. 团体队列(Team Queue,UVA 540)

    题目描述 思路 两类队列,一类是团队的整体队列,此队列存放的是团队的编号,另一类是一个团队一个队列,此队列存放的是队员的编号 DEQUEUE操作:首先根据整体队列,找到第一个团队编号,根据团队编号确定 ...

  3. 解题报告——例题5-8 Unix is 命令(UVa 400)——26行代码解决

    题目大意: 读入n个字符串,按字典序排序,再按列优先输出,附加条件每行最多输出60个字符,在此条件下要求行最少.(最开始没仔细看题,以为在一行中,每个单词相隔最长单词的长度+2,最后一列单词空间长度为 ...

  4. (~解题报告~)L1-017 到底有多二 (15分)(16行代码AC)

    立志用更少的代码做更高效的表达 一个整数"犯二的程度"定义为该数字中包含2的个数与其位数的比值.如果这个数是负数,则程度增加0.5倍:如果还是个偶数,则再增加1倍.例如数字-131 ...

  5. 25行代码AC——习题5-7 打印队列(Printer Queue,UVa 12100)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-12100 题目描述: 我们需要用打印机打印任务.每个任务都有1~9间的优先级,优先级越高,任务越急. 打印机的运作方式:从打印队列里取出一 ...

  6. 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告

    励志用尽量少的代码做高效的表达. 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空 ...

  7. 解题报告——例题5-5 集合栈计算机 UVa12096

    五个操作: 1.PUSH:空集{}入栈 2.DUP:当前栈顶元素复制一份在入栈 3.UNION:出栈两个集合,然后把二者的并集入栈 4.INTERSECT:出栈两个元素,然后把二者的交集入栈 5.AD ...

  8. 解题报告——试题 基础练习 分解质因数——31行代码AC

    励志用少的代码做高效的表达 储备知识: 1.预处理: 预处理的意思是将可能用到的数据先行处理,形成一张表,如果想要调用某个数,直接去表里查找. 2.筛选法: 筛选法是预处理的一种. 一般用筛选法来求某 ...

  9. [LeetCode解题报告] 365. 水壶问题

    [LeetCode解题报告] 365. 水壶问题 一. 题目 1. 题目描述 2. 原题链接 二. 解题报告 1. 思路分析 2. 复杂度分析 3. 代码实现 三. 本题小结 一. 题目 1. 题目描 ...

最新文章

  1. Flutter开发之认识Flutter(二)
  2. Spring Security 5.5发布,正式实装OAuth2.0的第五种授权模式
  3. C#二进制格式与文件相互转换
  4. keycode对照表(键码对照表)
  5. Effective C++学习第六天
  6. php 预览器,浏览器html代码快速预览小工具
  7. ASP.NET程序中常用的三十一种代码
  8. pycharm调节字体大小
  9. html写法影响加载,html加载顺序以及影响页面二次渲染额的因素
  10. PLC和工控机有什么关系?
  11. 排序算法之时间复杂度O(n2)
  12. 百度排名批量查询_企业网站核心关键词排名消失,什么原因?
  13. 如何配置QQ邮箱或腾讯企业邮箱发送邮件
  14. 百面机器学习 之 集成学习
  15. 微信支付宝多商户解决方案
  16. 电脑怎么压缩图片大小,4个通用方法分享
  17. S32K116调试记录(1)SWD接口调试
  18. Android 录制桌面视频 screenrecord
  19. 计算机网络安全国际会议,2021年计算机网络安全与软件工程国际学术会议(CNSSE 2021)...
  20. 选择游戏服务器需要什么配置?

热门文章

  1. PostgreSQL和MySQL技术全面剖析
  2. Flink的处理背压​原理及问题-面试必备
  3. LiveVideoStackCon 倒数计时:0
  4. 吉长江:基于学习的视频植入技术是未来趋势
  5. 何亚明:Facebook的工具文化和多媒体QoE
  6. LRU原理及其实现(C++)
  7. 第一章 Spark系统概述
  8. 基于Vue-SSR优化方案归纳总结
  9. 腾讯DevOps全链路解决方案
  10. Move or commit them before Pull git