链接:
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 }