UVA - 540:Team Queue
主要的关键在于:不要试图让所有团队的人在一个队列里面,因为这样如果新入队的是一个前面团队的成员则必须先出队再入队。
应该把每个团队看做一个整体,用一个队列维护团队的顺序,用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相关推荐
- 【例题5-6 UVA 540 】Team Queue
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用两个队列模拟就好. 记录某个队在不在队列里面. 模拟 [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] #in ...
- 算法竞赛进阶指南0x12:Team Queue
原题链接 有 n 个小组要排成一个队列,每个小组中有若干人. 当一个人来到队列时,如果队列中已经有了自己小组的成员,他就直接插队排在自己小组成员的后面,否则就站在队伍的最后面. 请你编写一个程序,模拟 ...
- 540 - Team Queue
Team Queue PS:因为该题排版较麻烦,这里给出OJ网址:UVa540 - Team Queue 有t个团队的人正在排一个长队.每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一 ...
- 【队列】Team Queue(luogu-UVA540/poj 2259)
Team Queue luogu-UVA540 poj 2259 题目大意: 有n个小组的人要排队,每个小组中有若干个人,当一个人入队时,如果队中有自己小组的人就跟在此人后面,否则站在队尾,现在给出一 ...
- UVA - 136:Ugly Numbers
Ugly Numbers 来源:UVA 标签: 参考资料:<算法竞赛入门经典>P120 相似题目: 题目 Ugly numbers are numbers whose only prime ...
- HDU1387 Team Queue
题目描述: Problem Description Queues and Priority Queues are data structures which are known to most com ...
- UVA - 1103:Ancient Messages
Ancient Messages 来源:UVA 标签: 参考资料: 相似题目: 题目 In order to understand early civilizations, archaeologist ...
- IOS并发编程指南:Dispatch Queue任务执行与Dispatch Source
导读: 本文为读<Concurrency Programming Guide>笔记第三篇,在对OS X和iOS应用开发中实现任务异步执行的技术.注意事项.Operation与Dispatc ...
- 提交MapReduce任务出错:unknown queue: default
报错:unknown queue: default 原因:提交job作业,给application设置队列,如果没有设置队列,默认加载default队列,问题是学习配置任务队列的时候,我把参数设置or ...
最新文章
- linux下sudo命令[转]
- Echarts中Option属性设置
- 十二:内存简单介绍和OC的内存管理
- IoT“永恒之蓝”来袭:路由器等智能硬件成重灾区
- Android Gradle配置构建
- 定位CoreLocation 使用
- html表格行数代码,HTML表格可选行Javascript包
- smote算法 不平衡数据集处理方法
- 硬件虚拟化检测工具:securable
- rxbus 源码_基于APT的RxBus库
- 先试试这一招,再决定是否要撬开拉杆箱的密码锁——巧开密码锁
- 设 l í {a,b,c}* 是满足下述条件的符号串构成的语言,陇东学院《编译原理》练习题及答案...
- 隔行插入行、隔行标示颜色,#E灵 #Excel插件
- flask中flash(闪现)的使用
- kedacom摄像头怎么预置_【科达 HD95D会议摄像机控制键盘】 - 太平洋安防网
- APP爬虫之央视新闻
- 资深Android开发带你入门Framework,深夜思考
- 如何通过互联网赚钱?
- 从道通诉大疆一案看美国337调查中的国内实业原则
- FreeCAD紧固件自动生成工作台插件推荐:Fasteners workbench
热门文章
- php与JAVA的RSA加密互通
- for+next()实现数组的遍历及while list each 的使用
- 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票
- 如何做好一名软件实施人员 (转载)
- ntp如何确认与服务器偏差_LED电子时钟显示屏如何实现时间同步统一校时?
- html5中音乐播放器怎么写,打造属于自己的音乐播放器 HTML5之audio标签
- java mapfile_基于文件的数据结构:关于MapFile
- java 李刚 pdf_Java数据库技术详解(李刚) PDF_源雷技术空间
- xml mysql 模糊查询_mybatis+Spring mysql的模糊查询问题
- 是否可以限制蓝牙传输距离_技术文章—关于蓝牙传输范围的常见误解