例题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();
    }
}

原文地址:https://www.cnblogs.com/yichuan-sun/p/9695455.html

时间: 2024-10-07 17:58:23

例题5-6 团体队列 Team Queue UVA - 540的相关文章

UVa 540 (团体队列) Team Queue

题意: 每个人都属于一个团体,在排队的时候,如果他所在的团体有人在队伍中,则他会站到这个团体的最后.否则站到整个队伍的队尾. 输出每次出队的人的编号. 分析: 容易看出,长队中,在同一个团体的人是排在一起的. 所以用两个队列模拟即可,一个队列保留团体的编号,另外一个队列数组存放的是团体中每个人的编号. 1 #include <cstdio> 2 #include <queue> 3 #include <map> 4 using namespace std; 5 6 co

Team Queue UVA - 540

题意:有t个团队的人正在排一个长队.每次新来一个人时,如果他有队友在队伍里,那么这个新人会插队到最后一个队友的身后:否则他就排到长队的末尾. ENQUEUX x: 编号为x人进入长队. DEQUEUX: 长队的队首出队. STOP: 停止模拟. 用两个队列,一个是长队,一个是各个团队的队列. 1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<string> 5

UVa 540 Team Queue(团队队列)

题意  模拟团队队列的入队和出队 STL应用  用一个队列维护团队编号  再用一个队列数组维护个体 #include <cstdio> #include <cstring> #include <queue> #include <map> using namespace std; const int N = 1000005; int team[N]; int main() { int cas = 0, n, t, a; char cmd[20]; while(

UVA - 540 Team Queue(STL,队列 )

Team Queue Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known,

POJ 2259 Team Queue 数据结构 队列

Team Queue Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3282   Accepted: 1188 Description Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known, thoug

ACM学习历程——UVA540 Team Queue(队列,map:Hash)

Description Team Queue   Team Queue  Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known, though it occurs often in everyday life. At lunch time the queue in front

【UVa 540】Team Queue

  Team Queue  Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known, though it occurs often in everyday life. At lunch time the queue in front of the Mensa is a team

UVa 540 小团体队列

题意:队列中有小团体(队列).当入队时,如果有该团体的元素在队列中,则新元素排到该团体的尾部,否则排到队列的尾部.出队时和正常的一样,队首元素出列. 思路:这个用STL很好模拟,用纯C的话,很直接会想到用二维数组来做,每个团体是其中的一个一维数组,最多再开一个数组来对小团体编号进行排队.但是当时没有看到题目中说的每个团体最后有1000个元素,这样的话我以为要开1000X200000的数组,忒大了~ 然后用的链表来实现.这里仍然是避免了指针和动态分配内存等易出错的东西,(不过这个方法还是把自己弄晕

Team Queue POJ - 2259 (队列)

Queues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known, though it occurs often in everyday life. At lunch time the queue in front of the Mensa is a team queue, for exa