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相关推荐

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

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

  2. 540 - Team Queue

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

  3. HDU1387 Team Queue

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

  4. UVa540 Team Queue

    // 题意:有t个团队的人在排队.每次来了一个新人之后,如果他有队友在排队,那么这个新人会插队到队友的身后. // 要求支持三种指令:ENQUEUE x; DEQUEUE(队首出队); STOP.模拟 ...

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

    题目大意: 有t个团队的人正在排一个长队,每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一个队友的身后.如果没有任何一个队友排队,那么他会排到长队的队尾.输入每个团队中所有队员的编号, ...

  6. UVA - 540:Team Queue

    主要的关键在于:不要试图让所有团队的人在一个队列里面,因为这样如果新入队的是一个前面团队的成员则必须先出队再入队. 应该把每个团队看做一个整体,用一个队列维护团队的顺序,用t个队列维护每个团队内部的顺 ...

  7. POJ 2259 team queue团队排队问题

    题目链接: http://poj.org/problem?id=2259 题目大意: 告诉你一堆人(m个人是一组的,n个人是一组的....):然后一个人来排队了,先看下有自己组的熟人吗?有的话直接排在 ...

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

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

  9. Poj2259 Team Queue 【队列】

    http://poj.org/problem?id=2259 队列是一种先进先出的数据结构.它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称作队尾 ...

  10. UVA 540 Team Queue

    题目链接:https://vjudge.net/problem/UVA-540 题目翻译摘自<算法禁赛入门经典> 题目大意 有 t 个团队的人正在排一个长队.每次新来一个人时,如果他有队友 ...

最新文章

  1. 《Nmap渗透测试指南》—第6章6.4节IP欺骗
  2. openfeign 负载均衡_再谈openfeign,聊聊它的源代码
  3. C/C++控制台应用程序——画三角形、圆、直线、矩形
  4. 身体对腐朽灵魂的一次震撼:向京的雕塑与观众的行为
  5. 一次问题处理后的处理流程总结
  6. windows取证之镜像取证仿真步骤
  7. 苹果鼠标滚轮驱动_苹果鼠标magic mouse在戴尔电脑Windows10系统上使用滚轮的方法...
  8. power BI爬取网页数据方法
  9. 骗子QQ微信在线查询系统网站源码
  10. 新宝综述拉升大阳包阴沪指收复3600点
  11. 电路设计基础--光耦接口电路的设计和参数选取--高速光耦TLP109
  12. error日志显示不全的问题,-XX:-OmitStackTraceInFastThrow
  13. Oracle表空间系列
  14. (五)latex -- 特殊符号
  15. 天然气气相色谱仪的软件性能分析
  16. Win10下LoadRunner12 下载安装汉化图文教程(含LoadRunner安装包)
  17. 盘点2021年流行报表开发工具【测评】
  18. 企业网盘的映射盘、同步盘、虚拟盘 都是些什么?
  19. 多个硬盘间克隆操作系统
  20. ultral edit

热门文章

  1. 修改迅雷下载中“边下边播”的默认播放器
  2. hexo next auto_excerpt无法使用
  3. Error opening zip file or JAR manifest missing
  4. SQL注入:sqli-labs lesson-1 小白详解
  5. 网络狂飙2(netspeeder2) v2.0 游戏版 怎么用
  6. 我安装archlinux的过程总结
  7. Asp.Net MVC4.0 官方教程 入门指南之八--为Movie模型和库表添加字段
  8. java自行车北京_JAVA公共自行车地图api调用代码实例
  9. Beamer编译排错
  10. 厦门大学-机器学习-苏松志