主要的关键在于:不要试图让所有团队的人在一个队列里面,因为这样如果新入队的是一个前面团队的成员则必须先出队再入队。

应该把每个团队看做一个整体,用一个队列维护团队的顺序,用t个队列维护每个团队内部的顺序。

还有就是要维护成员编号到团队的映射关系,我这里用了一个一维数组,因为觉得1e6也不是很大。看到书里面用的map,觉得可以但是没必要。

我还用了一个数组去维护每个团队是否有人站队。看书里面的代码才发现完全是多余的,我们可以通过每个团队自己的队列是不是空来判断。

多组样例输入,应该把循环放在主函数里面,然后把初始化、读入、处理分开。多组样例的初始化十分重要,很容易出现问题。这里因为初始化不是很复杂我和读入放在了一起。

感觉自己的代码结构清晰一点。书里面的命名都好简洁,觉得自己如果这样命名很快就忘记是干什么的了。可能还是水平不够,驾驭不了太复杂的代码。
还有就是不要忘记关闭同步加速cin/cout

#include <iostream>
#include <string>
#include <array>
#include <queue>using namespace std;namespace {constexpr int MAX_TEAM = 1005;constexpr int MAX_MEM = 1e6 +5;array<int, MAX_MEM> id;     //team id of each memberqueue<int> team;            //team queuearray<queue<int>, MAX_TEAM> team_member;//member queue in each teamarray<bool, MAX_TEAM> is_in_queue;int t;int case_num = 0;
}void input() {while (!team.empty()) team.pop();int n, x;for (int i = 0; i < t; ++i) {is_in_queue[i] = false;while (!team_member[i].empty()) team_member[i].pop();cin >> n;while (n--) {cin >> x;id[x] = i;}}
}void deal() {string cmd;int x;int team_id;while (cin >> cmd && cmd[0] != 'S') {if (cmd[0] == 'E') {cin >> x;if (is_in_queue[id[x]]) {team_member[id[x]].push(x);} else {team.push(id[x]);is_in_queue[id[x]] = true;team_member[id[x]].push(x);}} else {team_id = team.front();auto &the_team = team_member[team_id];cout << the_team.front() << "\n";the_team.pop();if (the_team.empty()) {team.pop();is_in_queue[team_id] = false;}}}
}int main() {ios::sync_with_stdio(false);while (cin >> t) {if (t == 0) {break;}++case_num;cout << "Scenario #" << case_num << "\n";input();deal();cout << "\n";}return 0;
}

UVA - 540:Team Queue相关推荐

  1. 【例题5-6 UVA 540 】Team Queue

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用两个队列模拟就好. 记录某个队在不在队列里面. 模拟 [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] #in ...

  2. 算法竞赛进阶指南0x12:Team Queue

    原题链接 有 n 个小组要排成一个队列,每个小组中有若干人. 当一个人来到队列时,如果队列中已经有了自己小组的成员,他就直接插队排在自己小组成员的后面,否则就站在队伍的最后面. 请你编写一个程序,模拟 ...

  3. 540 - Team Queue

    Team Queue PS:因为该题排版较麻烦,这里给出OJ网址:UVa540 - Team Queue 有t个团队的人正在排一个长队.每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一 ...

  4. 【队列】Team Queue(luogu-UVA540/poj 2259)

    Team Queue luogu-UVA540 poj 2259 题目大意: 有n个小组的人要排队,每个小组中有若干个人,当一个人入队时,如果队中有自己小组的人就跟在此人后面,否则站在队尾,现在给出一 ...

  5. UVA - 136:Ugly Numbers

    Ugly Numbers 来源:UVA 标签: 参考资料:<算法竞赛入门经典>P120 相似题目: 题目 Ugly numbers are numbers whose only prime ...

  6. HDU1387 Team Queue

    题目描述: Problem Description Queues and Priority Queues are data structures which are known to most com ...

  7. UVA - 1103:Ancient Messages

    Ancient Messages 来源:UVA 标签: 参考资料: 相似题目: 题目 In order to understand early civilizations, archaeologist ...

  8. IOS并发编程指南:Dispatch Queue任务执行与Dispatch Source

    导读: 本文为读<Concurrency Programming Guide>笔记第三篇,在对OS X和iOS应用开发中实现任务异步执行的技术.注意事项.Operation与Dispatc ...

  9. 提交MapReduce任务出错:unknown queue: default

    报错:unknown queue: default 原因:提交job作业,给application设置队列,如果没有设置队列,默认加载default队列,问题是学习配置任务队列的时候,我把参数设置or ...

最新文章

  1. linux下sudo命令[转]
  2. Echarts中Option属性设置
  3. 十二:内存简单介绍和OC的内存管理
  4. IoT“永恒之蓝”来袭:路由器等智能硬件成重灾区
  5. Android Gradle配置构建
  6. 定位CoreLocation 使用
  7. html表格行数代码,HTML表格可选行Javascript包
  8. smote算法 不平衡数据集处理方法
  9. 硬件虚拟化检测工具:securable
  10. rxbus 源码_基于APT的RxBus库
  11. 先试试这一招,再决定是否要撬开拉杆箱的密码锁——巧开密码锁
  12. 设 l í {a,b,c}* 是满足下述条件的符号串构成的语言,陇东学院《编译原理》练习题及答案...
  13. 隔行插入行、隔行标示颜色,#E灵 #Excel插件
  14. flask中flash(闪现)的使用
  15. kedacom摄像头怎么预置_【科达 HD95D会议摄像机控制键盘】 - 太平洋安防网
  16. APP爬虫之央视新闻
  17. 资深Android开发带你入门Framework,深夜思考
  18. 如何通过互联网赚钱?
  19. 从道通诉大疆一案看美国337调查中的国内实业原则
  20. FreeCAD紧固件自动生成工作台插件推荐:Fasteners workbench

热门文章

  1. php与JAVA的RSA加密互通
  2. for+next()实现数组的遍历及while list each 的使用
  3. 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票
  4. 如何做好一名软件实施人员 (转载)
  5. ntp如何确认与服务器偏差_LED电子时钟显示屏如何实现时间同步统一校时?
  6. html5中音乐播放器怎么写,打造属于自己的音乐播放器 HTML5之audio标签
  7. java mapfile_基于文件的数据结构:关于MapFile
  8. java 李刚 pdf_Java数据库技术详解(李刚) PDF_源雷技术空间
  9. xml mysql 模糊查询_mybatis+Spring mysql的模糊查询问题
  10. 是否可以限制蓝牙传输距离_技术文章—关于蓝牙传输范围的常见误解