uva 540 Team Queue

简介: 点击打开链接uva 540 思路: list+map模拟 分析: 1 题目的意思是有n个队伍,每个队伍的人数为m。 2 现在有三种操作,ENQUEUE x是插入x,如果队列里面已经有x这一队的成员那么直接插入到这一队的最后一个,否则插入到...

点击打开链接uva 540

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

代码:

#include<map>
#include<list>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 1010;

map<int , int>mp;
list<int>ls;
list<int>:: 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<int>:: 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;
}



目录
相关文章
|
8月前
uva540 team queue
uva540 team queue
24 0
|
8月前
uva133 The Dole Queue
uva133 The Dole Queue
42 0
|
Java
2017 Multi-University Training Contest - Team 9 1002&&HDU 6162 Ch’s gift【树链部分+线段树】
Ch’s gift Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1354    Accepted Submission(s): 496 Problem Description Mr.
1269 0
|
Java
2017 Multi-University Training Contest - Team 9 1005&&HDU 6165 FFF at Valentine【强联通缩点+拓扑排序】
FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1060    Accepted Submission(...
1177 0
2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】
Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1539    Accepted Submission(s...
1301 0
|
Java
2017 Multi-University Training Contest - Team 1 1002&&HDU 6034 Balala Power!【字符串,贪心+排序】
Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2668    Accepted Submission(s...
1244 0
|
Java 人工智能 BI
2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 652    Accepted Submission(s): 267...
1163 0
|
Java
[LeetCode]--225. Implement Stack using Queues
Implement the following operations of a stack using queues. push(x) – Push element x onto stack. pop() – Removes the element on top of the stack. top() – Get the top element. empty() –
1282 0