题目链接:
http://poj.org/problem?id=2259

题目大意:

告诉你一堆人(m个人是一组的,n个人是一组的。。。。);然后一个人来排队了,先看下有自己组的熟人吗?有的话直接排在自己组的人的队尾(呵呵,是不是现实中有这样的),没有熟人的话直接排队尾咯。
题目给定进队和出队命令,求解出队的顺序。

思路:

  1. 每个组需要有一个队列 queue<int> team[teamIndex]
  2. 每个组需要一个标记,我们组是否有人 true,false bool teamInQueue[teamIndex]
  3. 每个人与组号之间的映射 people[peopleID]=teamIndex
  4. 如果组的标记为 true,再把组的序号存成大的队列 queue<int> mainQueue
  5. 入队:检查人ID是哪个组的;check组号的标记,知道组是否在大队 mainQueue里,true,则在该组入队,false,则把自己组的标记改成 true,并把自己的组号压入大队 mainQueue里,并且自己入队该组
  6. 出队:找到 mainQueue里的 front是哪个组的组号,从该组打印ID并出队;检查该组还有人吗,如果没人了,把该组组号从 mainQueue里出队,并把该组的标记改成false

Accepted 代码如下:

/*** @description: poj2259 团队排队问题* @author: michael ming* @date: 2019/4/5 11:24* @modified by: */
#include <iostream>
#include <queue>
#include <string>
using namespace std;
#define MAX 1000
#define MAX_PEOPLE 1000000queue<int> team[MAX]; //team[i]代表一个组队列
queue<int> mainQueue;   //宏观主队列,存储teamIndex值
bool teamInQueue[MAX];  //队伍是否排在主队列中
int people[MAX_PEOPLE]; //存储人的队伍teamIndex编号
int teamNums, Scenario=1;
void init()  //每次进入下一次任务时,清空前一次的记录
{for(int i = 0; i < teamNums; ++i)  //队列清空{teamInQueue[i] = false;while(!team[i].empty())team[i].pop();}while(!mainQueue.empty())mainQueue.pop();
}
void input()    //输入人员信息,及记录每人的组号
{int totalPeopleInTeam,peopleID;for(int teamIndex = 0; teamIndex < teamNums; ++teamIndex){cin >> totalPeopleInTeam;for(int j = 0; j < totalPeopleInTeam; ++j){cin >> peopleID;people[peopleID] = teamIndex;//把每个人的ID(数组中的位置)与其值(组号)建立映射}}
}
void solve()
{int peopleID,teamID;string command;cout << "Scenario #" << Scenario++ << endl;while(cin >> command && command[0] != 'S')  //STOP停止{if (command[0] == 'E')  //ENQUEUE入队{cin >> peopleID;  //输入ID后查询其组号teamID(即people[peopleID])teamID = people[peopleID];if(teamInQueue[teamID]) //组号是否在大队列里呢(初始为false不在){team[teamID].push(peopleID);  //找到我的组入组}else    //我组没人,我是第一个{teamInQueue[teamID] = true; //我们组终于有人了mainQueue.push(teamID);     //我们组的组号排在最后一组team[teamID].push(peopleID);  //找到我的组入组}}else   //DEQUEUE出队{if(!mainQueue.empty())  //大团组必须还有,如果无,则完全没人了{teamID = mainQueue.front();   //队头是哪个组的呀cout << team[teamID].front() << endl; //从相应的组里找到该组的头team[teamID].pop();       //打印了,出队if(team[teamID].empty())  //这个组空了,都出去了{teamInQueue[teamID] = false;  //标记一下mainQueue.pop();    //从大队里删除空组}}}}cout << endl;
}
int main()
{while(cin >> teamNums && teamNums){init();   //初始化组的标记,及清空队列input();    //输入人员ID,记录人员组号solve();    //队列出队,入队操作}return 0;
}

POJ 2259 team queue团队排队问题相关推荐

  1. queue POJ 2259 Team Queue

    题目传送门 题意:先给出一些小组成员,然后开始排队.若前面的人中有相同小组的人的话,直接插队排在同小组的最后一个,否则只能排在最后面.现在有排队和出队的操作. 分析:这题关键是将队列按照组数分组,用另 ...

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

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

  3. 540 - Team Queue

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

  4. ②号团队【扫黑除恶Team】-团队任务5:项目总结会

    文章标题格式.②号团队[扫黑除恶Team]-团队任务5:项目总结会 说明团队信息.在文章开头给出团队序号.开发的软件名称.今日整理人姓名与学号以及在团队中的职务. 我们是②号团队-扫黑除恶Team,我 ...

  5. HDU1387 Team Queue

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

  6. Poj2259 Team Queue 【队列】

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

  7. UVa540 Team Queue

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

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

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

  9. UVA - 540:Team Queue

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

最新文章

  1. 同步、异步、堵塞、非堵塞和函数调用及I/O之间的组合概念
  2. Contains Duplicate II
  3. Intel处理器家族和分类
  4. C#中将原表复制到新表
  5. Bailian4140 方程求解【二分法】
  6. .NET编程 -- .NET 2.0 中对配置文件的读写
  7. 有关SQLite数据库的一些实证数据,有一定历史比较和参考意义
  8. 「How The Economic Machine Works」《经济机器是如何运转的》中文字幕
  9. gigaset812说明书_西门子GIASET825电话机说明书.pdf
  10. 鸿蒙渊主线任务,《天下3》更新公告(版本2.0.848)
  11. python画图颜色代码rgb_如何获取matplotlib颜色方案的RGB值?
  12. SqlServer数据库误删除找回
  13. 404服务器错误的讲解
  14. ind2vec和vec2ind函数用法
  15. 独角兽项目 5 - 两个披萨团队和技术债务
  16. adb 无线调试 usb拔除后立即失效解决
  17. 菜鸟浅谈“诈骗”希望“治未病
  18. Word 2013去掉封面和目录的页眉
  19. ps:把字体颜射换成图片背景
  20. 学人工智能电脑配置要求高吗?多少钱能搞定?

热门文章

  1. php公钥模数,php – 如何从公共指数和RSA模数生成DER / PEM证书?
  2. java char 空_2020重新出发,JAVA入门,数据类型
  3. [摸鱼]cdq分治 学习笔记
  4. 洛谷树剖模板题 P3384 | 树链剖分
  5. Git安装及密钥的生成并上传本地文件到GitHub上
  6. Qt pro文件语法
  7. '[linux下tomcat 配置
  8. #define typedef 区别
  9. C# 转繁体转简体转拼音,超级文本大转换
  10. vim粘贴板和系统粘贴板的共享(linux)