UVA - 540 Team Queue
2017-08-30 23:18
393 查看
/* 思路: 队列题,每个团队有一个队列,团队整体又形成一个队列 收获: 1. 关于 queue 队列是符合FIFO原则的“公平队列”,STL队列定义在头文件<queue>中 声明:queue<int> s; 操作: push()和pop()为入队出队操作,front()取队首元素(但不删除) 2. 关于优先队列 同样定义在<queue>中 声明:priority_queue<int>pq; 特点:每次出队的不是先进队列的元素,而是优先级最高的元素 由于出队的不是先进队的元素,出队的方法尤 front() 变为了 top() 3. 自定义类型也能组成优先队列 只要定义了“小于”运算符,能比较大小,就可以使用优先队列 特殊的情况下,需要使用自定义方式比较优先级,具体情况和处理见《入门经典》P119 4. 常见优先队列,STL已提供其定义方法,例如“越小的整数优先级越大的队列”可写成: priority_queue<int, vector<int>, greater<int> > pq; 如果时越小整数优先级越低的队列: priority_queue<int> pq; */
#include <cstdio>
#include <queue>
#include <map>
#include <string>
#include <iostream>
using namespace std;
const int maxt = 1010;
int main()
{
cin.tie(0);
cin.sync_with_stdio(false);
int t, kase = 0;
while (cin >> t && t)
{
cout << "Scenario #" << ++kase << endl;
//记录所有人的团队编号,team[x]的值表示标号为x的人所在的团队编号
map<int, int> team;
for (int i = 0; i < t; i++) //t为团队数目
{
int n, x; //n为每一团队人数
cin >> n;
while (n--)
{
cin >> x;
team[x] = i;
}
}
//模拟
queue<int> q, q2[maxt]; //q是团队的队列,q2[i]是团队i的成员的队列
while (1)
{
int x;
string cmd;
cin >> cmd;
if (cmd[0] == 'S') break;
if (cmd[0] == 'D')
{
int t = q.front(); // 先找到队首元素是哪组
cout << q2[t].front() << endl; q2[t].pop(); // 将队首元素pop出他所在的队
if (q2[t].empty()) q.pop(); // 若原来队首元素所在的队就只有一人,pop出来后,该队就没人了,该队从团队队列中pop出来
}
else if (cmd[0] == 'E')
{
cin >> x;
int t = team[x]; //找到他的对应团队
if (q2[t].empty()) q.push(t); //如果团队中原来没人排队,则团队先进入团队队列
q2[t].push(x); //编号x的人进入自己的团队排队
}
}
cout << endl;
}
return 0;
}
相关文章推荐
- UVA 540 Team Queue
- UVA - 540 - Team Queue
- 团体队列UVA540 Team Queue(队列简单用法)
- uva 540 Team Queue
- UVa 540 - Team Queue
- UVA 540 Team Queue(团体队列)
- UVA540 Team Queue(模拟:队列)
- Team Queue UVA 540
- uva 540 Team Queue
- Problem 033——UVa 540 - Team Queue
- UVA 540(p117)----Team Queue
- UVa 540 Team Queue (STL list&queue模拟插队)
- UVa 540 - Team Queue
- uva 540 Team Queue
- uva 540 team queue
- uva 540 Team Queue(queue与STL其他容器的综合运用)
- UVa 540 - Team Queue 数据结构专题
- Team Queue UVA 540 (团体队列)
- UVa 540: Team Queue
- UVA540:Team Queue(团体队列)