POJ 2259 队列

链接:

http://poj.org/problem?id=2259

题意:

排队吃饭,有n个team,每当一个人过来的时候,只要前面有他认识的人,就会直接插到那个team的后面,否则从后面排队

然后就是询问你每次出队的是谁

题解:

用两个队列就可以了,主队列里面是team编号,然后每个team再开一个队列就可以了

代码:

31 int n;
32 queue<int> Q[1010];
33 queue<int> que;
34 int Hash[MAXN];
35
36 int main() {
37     int cas = 1;
38     while (cin >> n, n) {
39         rep(i, 0, n) while (!Q[i].empty()) Q[i].pop();
40         while (!que.empty()) que.pop();
41         rep(i, 0, n) {
42             int m;
43             cin >> m;
44             while (m--) {
45                 int a;
46                 cin >> a;
47                 Hash[a] = i;
48             }
49         }
50         cout << "Scenario #" << cas++ << endl;
51         string s;
52         while (cin >> s && s != "STOP") {
53             if (s == "ENQUEUE") {
54                 int a;
55                 cin >> a;
56                 int id = Hash[a];
57                 if (Q[id].empty()) que.push(id);
58                 Q[id].push(a);
59             }
60             else {
61                 int id = que.front();
62                 cout << Q[id].front() << endl;
63                 Q[id].pop();
64                 if (Q[id].empty()) que.pop();
65             }
66         }
67         cout << endl;
68     }
69     return 0;
70 }
时间: 2024-10-13 14:39:37

POJ 2259 队列的相关文章

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

POJ 2259 Team Queue(STL队列)

转自:https://www.cnblogs.com/yjlblog/p/7056746.html 题目背景 队列和优先级队列是大多数计算机科学家都知道的数据结构.但是团队队列却不被人熟知,尽管在生活中经常出现.比如,午餐时间的食堂门口的队列就是一个团队队列.在一个团队队列中,每个元素属于一个团队.如果一个元素进入一个队列,它首先从头到尾地搜寻这个队列--检查是否它的队友(在同一个团队称之为队友)也在这个队列里.如果有,它就排在它队友的后面(:-D就是插队咯~~).如果没有,它就排在整个队列的最

Team Queue POJ - 2259 (队列)

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 queue, for exa

【POJ 2259】 Team Queue

[题目链接] http://poj.org/problem?id=2259 [算法] 由题,一个人入队时,若这个人所在的组已经有人在队列中,则加入队列,否则排到队末 因此我们发现,这个队列一定是由连续的一组人的若干段组成,不妨用一个队列记录每组人的顺序,再分别将每组建一个队列 维护这(n+1)个队列即可,具体细节,笔者不再赘述 [代码] #include <algorithm> #include <bitset> #include <cctype> #include &

queue POJ 2259 Team Queue

题目传送门 题意:先给出一些小组成员,然后开始排队.若前面的人中有相同小组的人的话,直接插队排在同小组的最后一个,否则只能排在最后面.现在有排队和出队的操作. 分析:这题关键是将队列按照组数分组,用另外一个队列保存组的序号,当该组里没有人了才换下一组.很好的一道题. 收获:队列的灵活运用 代码: /************************************************ * Author :Running_Time * Created Time :2015/9/9 星期三

数据结构:队列

例题:POJ - 2259 (http://poj.org/problem?id=2259) 题目大意:在队伍中,一个元素要入队,先会看看队伍中有没有跟它同队的队友,如果有,它会直接插在队友的后面,如果没有,那就插在整个队伍后面.出队时,整个队伍从头到尾出列.就好像我们平时排队一样,先看看队里有没有熟人,有熟人就排在熟人后面,没有熟人就自己乖乖的排在队伍的尾部. 思路:如果只用一个队列,那么入队时候的操作很复杂.所以,我们为每一支队伍(“熟人”)都开一个队列,然后再用一个队列来保存队伍的编号,用

POJ 3670 Eating Together 二分单调队列解法O(nlgn)和O(n)算法

本题就是一题LIS(最长递增子序列)的问题.本题要求求最长递增子序列和最长递减子序列. dp的解法是O(n*n),这个应该大家都知道,不过本题应该超时了. 因为有O(nlgn)的解法. 但是由于本题的数据特殊性,故此本题可以利用这个特殊性加速到O(n)的解法,其中的底层思想是counting sort分段的思想.就是如果你不会counting sort的话,就很难想出这种优化的算法了. O(nlgn)的单调队列解法,利用二分加速是有代表性的,无数据特殊的时候也可以使用,故此这里先给出这个算法代码

[ACM] poj 2823 Sliding Window(单调队列)

Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 36212   Accepted: 10723 Case Time Limit: 5000MS Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving from the very left

POJ 2823 Sliding Window(单调队列)

[题目链接] http://poj.org/problem?id=2823 [题目大意] 给出一个数列,问每k个数总最小值和最大值分别是多少 [题解] 单调队列顺序维护需求,时间节点超过k的点就出队 我们维护两次单调队列,用xor的小trick可以降低码量. [代码] #include <cstdio> #include <algorithm> using namespace std; const int MAX_N=1000010; int n,k; int a[MAX_N],b