Your task is to write a program that simulates such a team queue.
InputThe input will contain one or more test cases. Each test case begins with the number of teams t (1<=t<=1000). Then t team descriptions follow, each one consisting of the number of elements belonging to the team and the elements themselves. Elements are integers in the range 0 - 999999. A team may consist of up to 1000 elements.
Finally, a list of commands follows. There are three different kinds of commands:
ENQUEUE x - enter element x into the team queue
DEQUEUE - process the first element and remove it from the queue
STOP - end of test case
The input will be terminated by a value of 0 for t.
OutputFor each test case, first print a line saying "Scenario #k", where k is the number of the test case. Then, for each DEQUEUE command, print the element which is dequeued on a single line. Print a blank line after each test case, even after the last one.
Sample Input
2 3 101 102 103 3 201 202 203 ENQUEUE 101 ENQUEUE 201 ENQUEUE 102 ENQUEUE 202 ENQUEUE 103 ENQUEUE 203 DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 2 5 259001 259002 259003 259004 259005 6 260001 260002 260003 260004 260005 260006 ENQUEUE 259001 ENQUEUE 260001 ENQUEUE 259002 ENQUEUE 259003 ENQUEUE 259004 ENQUEUE 259005 DEQUEUE DEQUEUE ENQUEUE 260002 ENQUEUE 260003 DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 0
Sample Output
Scenario #1 101 102 103 201 202 203 Scenario #2 259001 259002 259003 259004 259005 260001
分析:用两个队列,分别表示按团队来的排序和各个团队里自身的排序,再用一个map来储存个人的编号信息和他所对应的团队的编号
注意:队列啊,map啊得在循环内部定义,否则得加clear()清空,不注意很容易WA
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <map> 5 #include <queue> 6 using namespace std; 7 const int maxn=1010;//题目上说团队数和团队内的人数都不超过1000 8 int main(){ 9 int t,k=0; 10 while(cin>>t&&t!=0){ 11 queue<int> q;//这个是团队所组成的队列 12 queue<int> team_q[maxn];//这个是各个团队内部组成的队列 13 map<int,int> team;//这个用来储存某个人的编号和他所对应的团队的编号 14 cout<<"Scenario #"<<++k<<endl; 15 for(int i=1;i<=t;i++){ 16 int m;cin>>m; 17 while(m--){ 18 int x;cin>>x; 19 team[x]=i; 20 } 21 } 22 string s; 23 while(cin>>s&&s!="STOP"){ 24 if(s=="ENQUEUE"){ 25 int x;cin>>x; 26 int i=team[x];//x是本身的编号,i是他所对应团队的编号 27 if(team_q[i].empty()) q.push(i);//如果团队为空,则把该团队压入队列 28 team_q[i].push(x); 29 } 30 else if(s=="DEQUEUE") { 31 int i=q.front(); 32 cout<<team_q[i].front()<<endl; 33 team_q[i].pop(); 34 if(team_q[i].empty()) q.pop(); 35 } 36 } 37 cout<<endl; 38 } 39 return 0; 40 }