设为首页 加入收藏

TOP

uva 540 Team Queue
2014-11-23 21:54:10 来源: 作者: 【 】 浏览:9
Tags:uva 540 Team Queue

思路: list+map模拟
分析:
1 题目的意思是有n个队伍,每个队伍的人数为m。
2 现在有三种操作,ENQUEUE x是插入x,如果队列里面已经有x这一队的成员那么直接插入到这一队的最后一个,否则插入到队列的最后一个;DEQUEUE 是直接拿到队列的第一个元素输出,并删除队列的第一个元素;STOP是停止
3 直接利用map和list来模拟,由于题目要求要插入的具体的位置所以用list来模拟

代码:


#include
#include
#include
#include
#include
#include
using namespace std;

const int MAXN = 1010;

mapmp;
listls;
list:: iterator it[MAXN];
int cnt[MAXN];

void insert(int x){
    if(ls.size() == 0){
        ls.push_back(x);
        it[mp[x]] = ls.begin();
        return; 
    }   
    int tmp = mp[x];
    if(it[tmp] == ls.end()){
        ls.push_back(x); 
        it[tmp] = ls.end();
        it[tmp]--;
    }
    else{
        list:: iterator tmpIt = it[tmp];
        ls.insert(++tmpIt , x);
        it[tmp]++;
    }
}

int main(){
    int n , m , x;
    int Case = 1;
    char str[20];
    while(scanf("%d" , &n) && n){
         mp.clear();
         ls.clear();
         for(int i = 1 ; i < MAXN ; i++)
             it[i] = ls.end();
         memset(cnt , 0 , sizeof(cnt));
         printf("Scenario #%d\n" , Case++);
         for(int i = 1 ; i <= n ; i++){
             scanf("%d" , &m);
             while(m--){
                  scanf("%d" , &x); 
                  mp[x] = i;
             } 
         }
         while(scanf("%s" , str) && str[0] != 'S'){
             if(str[0] == 'E'){
                 scanf("%d" , &x);
                 insert(x);
                 cnt[mp[x]]++;
             }
             else{
                 int front = ls.front();
                 ls.pop_front();
                 int tmp = mp[front];
                 printf("%d\n" , front);
                 cnt[tmp]--;
                 if(cnt[tmp] == 0)
                     it[tmp] = ls.end();
             }
         }
         puts("");
    }
    return 0;
}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇内存共享基本演示 下一篇求两个多项式相加运算

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Linux 系统监控 的完 (2025-12-27 08:52:29)
·一口气总结,25 个 L (2025-12-27 08:52:27)
·【总结】100个最常用 (2025-12-27 08:52:22)
·有没有哪些高效的c++ (2025-12-27 08:20:57)
·Socket 编程时 Accep (2025-12-27 08:20:54)