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 }

 

posted @ 2017-04-29 15:53  Flowersea  阅读(304)  评论(0编辑  收藏  举报