首页 > 代码库 > POJ 2259 队列

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 }

 

POJ 2259 队列