UVa 540 (团体队列) Team Queue

题意:

每个人都属于一个团体,在排队的时候,如果他所在的团体有人在队伍中,则他会站到这个团体的最后。否则站到整个队伍的队尾。

输出每次出队的人的编号。

分析:

容易看出,长队中,在同一个团体的人是排在一起的。

所以用两个队列模拟即可,一个队列保留团体的编号,另外一个队列数组存放的是团体中每个人的编号。

 1 #include <cstdio>
 2 #include <queue>
 3 #include <map>
 4 using namespace std;
 5
 6 const int maxt = 1000 + 10;
 7 map<int, int> team;
 8 char cmd[10];
 9
10 int main()
11 {
12     //freopen("in.txt", "r", stdin);
13
14     int T, kase = 0;
15     while(scanf("%d", &T) == 1 && T)
16     {
17         printf("Scenario #%d\n", ++kase);
18
19         for(int i = 0; i < T; i++)
20         {
21             int n, x;
22             scanf("%d", &n);
23             while(n--) { scanf("%d", &x); team[x] = i; }
24         }
25         queue<int> q, q2[maxt];   //团体队列 和 q2[i]表示团体i中成员的队列
26
27         while(scanf("%s", cmd) == 1)
28         {
29             if(cmd[0] == ‘S‘) break;
30             if(cmd[0] == ‘E‘)
31             {
32                 int x, t;
33                 scanf("%d", &x);
34                 t = team[x];
35                 if(q2[t].empty()) q.push(t);
36                 q2[t].push(x);
37             }
38             else if(cmd[0] == ‘D‘)
39             {
40                 int t = q.front();
41                 printf("%d\n", q2[t].front());
42                 q2[t].pop();
43                 if(q2[t].empty()) q.pop();
44             }
45         }
46         puts("");
47     }
48
49     return 0;
50 }

代码君

时间: 2024-12-16 00:33:09

UVa 540 (团体队列) Team Queue的相关文章

例题5-6 团体队列 Team Queue UVA - 540

还好吧,刚开始没想明白用什么数据结构来做,后来才想到用一个队列和一个队列数组,一个存当前队伍的排队队列,另一个存每个在排队的队伍内部的人员队列.其他的set什么的,都不是最重要的内容了. 卡了我三个点: 1.忘了控制空队出队,空队排头了,导致了RE一次.在写了判定条件之后RE没了,成了WA-_- 2.这次WA是因为没有及时清除中间变量.是比较隐含的中间变量,表示某个队伍是否已在总队伍中的set,我在某只队伍最后一个成员从总队伍中出队后,没有清楚set中这支队伍的标记.也就是说,这支队伍其实不存在

UVa 540 Team Queue(团队队列)

题意  模拟团队队列的入队和出队 STL应用  用一个队列维护团队编号  再用一个队列数组维护个体 #include <cstdio> #include <cstring> #include <queue> #include <map> using namespace std; const int N = 1000005; int team[N]; int main() { int cas = 0, n, t, a; char cmd[20]; while(

UVA - 540 Team Queue(STL,队列 )

Team Queue Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known,

UVa 540 小团体队列

题意:队列中有小团体(队列).当入队时,如果有该团体的元素在队列中,则新元素排到该团体的尾部,否则排到队列的尾部.出队时和正常的一样,队首元素出列. 思路:这个用STL很好模拟,用纯C的话,很直接会想到用二维数组来做,每个团体是其中的一个一维数组,最多再开一个数组来对小团体编号进行排队.但是当时没有看到题目中说的每个团体最后有1000个元素,这样的话我以为要开1000X200000的数组,忒大了~ 然后用的链表来实现.这里仍然是避免了指针和动态分配内存等易出错的东西,(不过这个方法还是把自己弄晕

【UVa 540】Team Queue

  Team Queue  Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known, though it occurs often in everyday life. At lunch time the queue in front of the Mensa is a team

UVA 540(队列)

Description  Team Queue  Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known, though it occurs often in everyday life. At lunch time the queue in front of the Mensa

POJ 2259 Team Queue 数据结构 队列

Team Queue Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3282   Accepted: 1188 Description Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known, thoug

ACM学习历程——UVA540 Team Queue(队列,map:Hash)

Description Team Queue   Team Queue  Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known, though it occurs often in everyday life. At lunch time the queue in front

540 - Team Queue

Team Queue PS:因为该题排版较麻烦,这里给出OJ网址:UVa540 - Team Queue 有t个团队的人正在排一个长队.每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一个队友的身后.如果没有任何一个队友排队,则他会排到长队的队尾.输入每个团队中所有队员的编号,要求支持如下3种指令(前两种指令可以穿插进行). ENQUEUEx:编号为x的人进入长队. DEQUEUE:长队的队首出队. STOP:停止模拟. 对于每个DEQUEUE指令,输出出队的人的编号. #incl