Team Queue -uva

来源:互联网 发布:网络电视直播在线观看 编辑:程序博客网 时间:2024/06/07 18:58

STL的模拟,比较直接

#include<cstdio>#include<cstring>#include<queue>#include<iostream>#include<algorithm>#include<vector>using namespace std;#define MAX_SIZE 1000 + 100int team  [MAX_SIZE][MAX_SIZE];int visa  [MAX_SIZE];/*记录编号为i的小组是不是在队列里面*/int number[MAX_SIZE];/*表示第i个队伍在总队列的第number[i]个地方*/int n;int m[MAX_SIZE];int searchs(int x){  /*查找值为x的元素在哪个队列里*/    int *t;    for(int i = 0;i < n;i++){        t = find(team[i],team[i]+m[i],x);        int pos = t - team[i];        if(pos < m[i])            return i;    }}int main(){    int Case = 1;    while(scanf("%d",&n)!=EOF&&n){         memset(visa,0,sizeof(visa));         memset(number,0,sizeof(number));         vector<queue<int> >Team; /*定义一个队列的集合*/         for(int i = 0;i < n;i++){             scanf("%d",&m[i]); /*第i个队伍的长度*/             for(int j = 0;j < m[i];j++)                scanf("%d",&team[i][j]);         }         char order[50L];         printf("Scenario #%d\n",Case++);         while(true){             scanf("%s",order);             if(!strcmp(order,"STOP")) break;             else if(!strcmp(order,"DEQUEUE")){                    printf("%d\n",Team[0].front());                    int x = Team[0].front();                    Team[0].pop();                    if(Team[0].empty()){ /*如果空了的话*/                        int pos = searchs(x);                        visa[pos] = 0;/*编号为i的队伍已经不在队伍里了*/                        Team.erase(Team.begin());  /*开始的一队移除*/                        /*每个队伍的位置前移1位*/                        for(int w = 0 ; w < MAX_SIZE ;w++)                            number[w]--;                    }                }            else{                int x;                scanf("%d",&x);                int pos = searchs(x);                if(!visa[pos]){                    queue<int> temp;                    temp.push(x);                    Team.push_back(temp);                    visa[pos] = 1;                    number[pos] = Team.size() - 1;                }                else if(visa[pos]){ /*如果这个所属的队伍已经存在*/                    Team[number[pos]].push(x);                }            }         }         printf("\n");         Team.clear();    }    return 0;}


0 0
原创粉丝点击