例题5-6 团体队列 Team Queue UVA - 540

Posted yichuan-sun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了例题5-6 团体队列 Team Queue UVA - 540相关的知识,希望对你有一定的参考价值。

还好吧,刚开始没想明白用什么数据结构来做,后来才想到用一个队列和一个队列数组,一个存当前队伍的排队队列,另一个存每个在排队的队伍内部的人员队列。其他的set什么的,都不是最重要的内容了。

卡了我三个点:

1.忘了控制空队出队,空队排头了,导致了RE一次.在写了判定条件之后RE没了,成了WA—_—

2.这次WA是因为没有及时清除中间变量。是比较隐含的中间变量,表示某个队伍是否已在总队伍中的set,我在某只队伍最后一个成员从总队伍中出队后,没有清楚set中这支队伍的标记。也就是说,这支队伍其实不存在于总队伍了,但程序仍显示存在,就出错了。

3.隐含的空队排头,我把它放在了if判定条件里,所以每次检查到这里,我都只注意条件成立后的执行语句去了,就注意不到这一句,心里还一直认为它是正确的

学到了:

1.set可以直接用erase删除值为xx的元素,不一定非得结合迭代器

下面是代码

#include <bits/stdc++.h>
#define N 1005
using namespace std;
map<int,int> qnum;
set<int> sjud;
typedef queue<int> qi;
qi qq;          //标记当前总队列
qi cache[N];    //所有在排队的队伍的队员先后顺序,下标表示队伍号
void enqueue();
void dequeue();
int main()  {
    int n,m,num,cnt=0;
    cin>>n;
    while (n!=0)    {
        cout<<"Scenario #"<<++cnt<<endl;
        for (int i=0;i<n;i++)   {
            cin>>m;
            for (int j=0;j<m;j++) {
                cin>>num;
                qnum[num]=i;
            }
        }
        string opt="";
        cin>>opt;
        while (opt[0]!=‘S‘) {
            if (opt[0]==‘E‘)    enqueue();
            else if (opt[0]==‘D‘)   dequeue();
            cin>>opt;
        }
        cout<<endl;
        qnum.clear();
        sjud.clear();
        for (int i=0;i<n;i++)
            while (!cache[i].empty())   cache[i].pop();
        while (!qq.empty()) qq.pop();
        cin>>n;
    }
    return 0;
}

void enqueue()  {
    int nr;
    cin>>nr;
    if (!sjud.count(qnum[nr])){
        qq.push(qnum[nr]);
        sjud.insert(qnum[nr]);
    }
    cache[qnum[nr]].push(nr);
}

void dequeue()  {
    if (qq.empty()) return;
    if (!cache[qq.front()].empty()) {
        cout<<cache[qq.front()].front()<<endl;
        cache[qq.front()].pop();
    }
    if (cache[qq.front()].empty()&&!qq.empty())  {
        sjud.erase(qq.front());
        qq.pop();
    }
}

以上是关于例题5-6 团体队列 Team Queue UVA - 540的主要内容,如果未能解决你的问题,请参考以下文章

算法入门经典-第五章 例题5-6 团体队列

Team Queue UVA - 540

Uva 540.Team Queue

UVA 540 Team Queue

UVA540 Team Queue——题解 by hyl天梦

团体队列(UVa540)