Team Queue
Team Queue
题目链接:Team Queue
题目概述:
1. 题目的意思是有n个队伍,每个队伍的人数为m。
2. 现在有三种操作,ENQUEUE x是插入x,如果队列里面已经有x这一队的成员那么直接插入到这一队的最后一个,否则插入到队列的最后一个;DEQUEUE 是直接拿到队列的第一个元素输出,并删除队列的第一个元素;STOP是停止。
Input:
2 //共两个队伍
3 101 102 103 //第一队有3个元素,分别是101、102、103
3 201 202 203 //第二队有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
Output: Scenario #n
区分是第几队,然后依次输出出队元素
Scenario #1
101
102
103
201
202
203Scenario #2
259001
259002
259003
259004
259005
260001
解题思路:解决本题用了四个数据结构,依次讲解如下:
1. deque<int>* teamQueue = new deque<int>[t]
teamQueue数组用来保存每个队入队出队的元素。
2. deque<int>* teamHead = new deque<int>
teamHead 用来保存每个队在总队列中的位置。
3. map<int,int>* team = new map<int,int>
map 用来记录该元素所在的队。
4. isEnqueue[i]=false
用来记录该队是否有元素在队列中。
入队时如果用 isEnqueue 判断队列中是否有该队元素,如果有,直接在 teamQueue 中入队。如果没有,先在 teamHead 中入队,并设置该队 isEnqueue 为 true,最后在 teamQueue 中入队。
出队时先读取 teamHead 获得第一个入队的队列。然后在 teamQueue 中出队。如果出队后该队列为空,则 teamHead 再出队,并置该队 isEnqueue 为 false。
最终代码:
#include <iostream>
#include <cstring>
#include <deque>
#include <map>
#include <cstdio>using namespace std;int main()
{int t=0,n=0,key=0;int cas=1;while(scanf("%d",&t) != EOF && t != 0){deque<int>* teamQueue = new deque<int>[t];deque<int>* teamHead = new deque<int>;map<int,int>* team = new map<int,int>;printf("Scenario #%d\n",cas++);bool *isEnqueue=new bool[t];for(int i = 0; i < t; i++){isEnqueue[i]=false;scanf("%d",&n);for(int j = 0; j < n; j++){scanf("%d",&key);(*team)[key]=i;}}char s[20];while(scanf("%s",s)!=EOF && strcmp(s,"STOP")!=0){if (!strcmp(s,"ENQUEUE")) {scanf("%d",&key);if(!isEnqueue[(*team)[key]]){teamHead->push_back((*team)[key]);isEnqueue[(*team)[key]]=true;}teamQueue[(*team)[key]].push_back(key);}else{int head = teamHead->front();printf("%d\n",teamQueue[head].front());teamQueue[head].pop_front();if(teamQueue[head].empty()){teamHead->pop_front();isEnqueue[head] = false;}}}printf("\n");delete[] teamQueue;delete teamHead;delete team;delete[] isEnqueue;}return 0;
}
Team Queue相关推荐
- 【队列】Team Queue(luogu-UVA540/poj 2259)
Team Queue luogu-UVA540 poj 2259 题目大意: 有n个小组的人要排队,每个小组中有若干个人,当一个人入队时,如果队中有自己小组的人就跟在此人后面,否则站在队尾,现在给出一 ...
- 540 - Team Queue
Team Queue PS:因为该题排版较麻烦,这里给出OJ网址:UVa540 - Team Queue 有t个团队的人正在排一个长队.每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一 ...
- HDU1387 Team Queue
题目描述: Problem Description Queues and Priority Queues are data structures which are known to most com ...
- UVa540 Team Queue
// 题意:有t个团队的人在排队.每次来了一个新人之后,如果他有队友在排队,那么这个新人会插队到队友的身后. // 要求支持三种指令:ENQUEUE x; DEQUEUE(队首出队); STOP.模拟 ...
- 解题报告——例题 5-6团体队列(Team Queue UVa 540)——31行代码解决
题目大意: 有t个团队的人正在排一个长队,每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一个队友的身后.如果没有任何一个队友排队,那么他会排到长队的队尾.输入每个团队中所有队员的编号, ...
- UVA - 540:Team Queue
主要的关键在于:不要试图让所有团队的人在一个队列里面,因为这样如果新入队的是一个前面团队的成员则必须先出队再入队. 应该把每个团队看做一个整体,用一个队列维护团队的顺序,用t个队列维护每个团队内部的顺 ...
- POJ 2259 team queue团队排队问题
题目链接: http://poj.org/problem?id=2259 题目大意: 告诉你一堆人(m个人是一组的,n个人是一组的....):然后一个人来排队了,先看下有自己组的熟人吗?有的话直接排在 ...
- 【例题5-6 UVA 540 】Team Queue
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用两个队列模拟就好. 记录某个队在不在队列里面. 模拟 [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] #in ...
- Poj2259 Team Queue 【队列】
http://poj.org/problem?id=2259 队列是一种先进先出的数据结构.它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称作队尾 ...
- UVA 540 Team Queue
题目链接:https://vjudge.net/problem/UVA-540 题目翻译摘自<算法禁赛入门经典> 题目大意 有 t 个团队的人正在排一个长队.每次新来一个人时,如果他有队友 ...
最新文章
- 《Nmap渗透测试指南》—第6章6.4节IP欺骗
- openfeign 负载均衡_再谈openfeign,聊聊它的源代码
- C/C++控制台应用程序——画三角形、圆、直线、矩形
- 身体对腐朽灵魂的一次震撼:向京的雕塑与观众的行为
- 一次问题处理后的处理流程总结
- windows取证之镜像取证仿真步骤
- 苹果鼠标滚轮驱动_苹果鼠标magic mouse在戴尔电脑Windows10系统上使用滚轮的方法...
- power BI爬取网页数据方法
- 骗子QQ微信在线查询系统网站源码
- 新宝综述拉升大阳包阴沪指收复3600点
- 电路设计基础--光耦接口电路的设计和参数选取--高速光耦TLP109
- error日志显示不全的问题,-XX:-OmitStackTraceInFastThrow
- Oracle表空间系列
- (五)latex -- 特殊符号
- 天然气气相色谱仪的软件性能分析
- Win10下LoadRunner12 下载安装汉化图文教程(含LoadRunner安装包)
- 盘点2021年流行报表开发工具【测评】
- 企业网盘的映射盘、同步盘、虚拟盘 都是些什么?
- 多个硬盘间克隆操作系统
- ultral edit
热门文章
- 修改迅雷下载中“边下边播”的默认播放器
- hexo next auto_excerpt无法使用
- Error opening zip file or JAR manifest missing
- SQL注入:sqli-labs lesson-1 小白详解
- 网络狂飙2(netspeeder2) v2.0 游戏版 怎么用
- 我安装archlinux的过程总结
- Asp.Net MVC4.0 官方教程 入门指南之八--为Movie模型和库表添加字段
- java自行车北京_JAVA公共自行车地图api调用代码实例
- Beamer编译排错
- 厦门大学-机器学习-苏松志