简单队列应用
#include <stdio.h>
#include <queue>
#include <map>
using namespace std;
typedef int ELEMENT_INDEX;
typedef int TEAM_INDEX;
//map<ELEMENT_INDEX, TEAM_INDEX> record;
int record[1000000];
char cmd[9999];
char tmp[9999];
queue<ELEMENT_INDEX> teams[1001];
void func(int n){
int elem;
queue<TEAM_INDEX> team_order;
int cur_team;
static int cnt = 1;
printf("Scenario #%d\n", cnt);
while(1){
gets(cmd);
if(0 == strlen(cmd))
continue;
if(0 == strcmp("STOP", cmd))
break;
if(strstr(cmd, "ENQUEUE")){
sscanf(cmd, "%s %d", tmp, &elem);
cur_team = record[elem];
if(teams[cur_team].empty())
team_order.push(cur_team);
teams[cur_team].push(elem);
}
else{
if(team_order.empty())
continue;
cur_team = team_order.front();
printf("%d\n", teams[cur_team].front());
teams[cur_team].pop();
if(teams[cur_team].empty())
team_order.pop();
}
}
printf("\n");
cnt++;
}
int main(void){
int n, i, j, elem_n, elem_index;
//freopen("input.dat", "r", stdin);
while(1){
scanf("%d", &n);
if(0 == n)
break;
for(i=0; i<n; i++){
while(!teams[i].empty())
teams[i].pop();
scanf("%d", &elem_n);
for(j=0; j<elem_n; j++){
scanf("%d", &elem_index);
record[elem_index] = i;
}
}
func(n);
}
return 0;
}