题目大意

有一条长队,每个人均唯一属于一个组(有编号),执行给定操作序列,输出相应结果。操作如下:

(假设长队q1)

  • ENQUEUE x:标号为x的人入队,若q1中存在和x属于同一组的人,则将x插入长队中同组的最后一个人之后;否则插入长队最后一个之后

  • DEQUEUE:长队第一个人出队

  • STOP:结束该测试用例

思路分析

题意清晰后,问题变得简单,有多种解决思路,比较朴素的使用链表处理,但这里为了练习队列(队列也是链表实现的),采用双队列实现(相当于二级索引/二维数组(队列1–第一维,队列2–第二维)):

  • 队列2:存储位于长队中的同一组的人
  • 队列1:存储位于长队中的组号

数据结构如下:

queue<int> q1, q2[1010]; // 总团队队列,组内部队列

可定义map<int, int> team;存储人x的编号到组别编号,便于查询

注意点

每个测试用例后均需一空行,包括最后一个

命令判断时注意提取共性,简化代码

命令判断时,由于每个命令首字母均不同,因此可直接比较首字母,提高效率

由于map仅用于查询,也可用由哈希算法实现的unordered_map实现

若是超时,将cin/cout全改为scanf/printf

#include<bits/stdc++.h>
using namespace std;
int t, n, x, maxn;
string cmd;
int main() {
int Kcase = 1;
freopen("in.txt", "r", stdin);
while (cin >> t && t) {
map<int, int>team;//编号x -> 组别编号
for (int i = 0; i < t; ++i) {
cin >> n;
for (int j = 0; j < n; ++j) {
cin >> x;
team[x] = i;
}
}
printf("Scenario #%d\n", Kcase++);
queue<int>q1, q2[1010];//双队列存储 总团队队列,组内部队列
while (cin >> cmd && cmd[0] != 'S') {
if (cmd[0] == 'E') { // 入队
cin >> x;
if (q2[team[x]].empty()) { // 组内不存在队员
q1.push(team[x]); // 进入总队列
}
q2[team[x]].push(x); // 组内不存在队员,加入总队列最后
}
else if (cmd[0] == 'D') { // 出队
printf("%d\n", q2[q1.front()].front());
q2[q1.front()].pop();
if (q2[q1.front()].empty()) q1.pop(); // 维护总队列
}
}
puts("");
}
return 0;
}

UVA540 Team Queue(双queue)的更多相关文章

  1. UVA540 Team Queue——题解 by hyl天梦

    UVA540 Team Queue 题解 题目描述:题目原题 https://vjudge.net/problem/UVA-540 Queues and Priority Queues are dat ...

  2. UVa540 Team Queue

    // 题意:有t个团队的人在排队.每次来了一个新人之后,如果他有队友在排队,那么这个新人会插队到队友的身后. // 要求支持三种指令:ENQUEUE x; DEQUEUE(队首出队); STOP.模拟 ...

  3. 团体队列UVA540 Team Queue(队列简单用法)

    题目背景 队列和优先级队列是大多数计算机科学家都知道的数据结构.但是团队队列却不被人熟知,尽管在生活中经常出现.比如,午餐时间的食堂门口的队列就是一个团队队列.在一个团队队列中,每个元素属于一个团队. ...

  4. uva540 Team Queue by sixleaves

    这道题目.主要是对队列的灵活应用.其实就是一道模拟题目,只要你洞察出题目的本质就十分简单.题目意思大体是有多组测试数据,每组的一开始是一个数字t,代表一共有多少的团队,接着是t行输入,每一行都由一个数 ...

  5. 团体队列 UVA540 Team Queue

    题目描述 有t个团队的人正在排一个长队.每次新来一个人时,如果他有队友在排队,那么新人会插队到最后一个队友的身后.如果没有任何一个队友排队,则他会被排到长队的队尾. 输入每个团队中所有队员的编号,要求 ...

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

    Description   Team Queue   Team Queue  Queues and Priority Queues are data structures which are know ...

  7. UVa540 Team Queue(队列queue)

    队列 STL队列定义在头文件<queue>中, 用“ queue<int>s ” 方式定义, 用push()和pop()进行元素的入队和出队操作, front()取队首元素(但 ...

  8. ZOJ2724 Windows Message Queue 裸queue的模拟

    题目要求FIFO #include<cstdio> #include<cstdlib> #include<iostream> #include<queue&g ...

  9. [Algorithms] Queue & Priority Queue

    In this lesson, you will learn how to create a queue in JavaScript. A queue is a first-in, first-out ...

  10. prequeue receive queue backlog queue

    prequeue和backlog和receive 5.6 TCP prequeue http://blog.csdn.net/u011130578/article/details/44814201 t ...

随机推荐

  1. 本地训练,立等可取,30秒音频素材复刻霉霉讲中文音色基于Bert-VITS2V2.0.2

    之前我们使用Bert-VITS2V2.0.2版本对现有的原神数据集进行了本地训练,但如果克隆对象脱离了原神角色,我们就需要自己构建数据集了,事实上,深度学习模型的性能和泛化能力都依托于所使用的数据集的 ...

  2. 如何使用Tampermonkey开发并使用一个浏览器脚本

    准备工作 简介 Tampermonkey 是一款强大的浏览器扩展,它允许您定制网页的行为,改变和优化网页的展示方式或者功能以满足个人需求.通过编写自定义脚本,您可以实现许多有趣的功能,从自动化任务到改 ...

  3. 3. Shell 条件判断

    重点: 条件测试. read. Shell 环境配置. case. for. find. xargs. gzip,bzip2,xz. tar. sed. 1)Shell 的配置文件 Bash Shel ...

  4. 报错Error running 'Tomcat 9.0.68': Can't find catalina.jar【解决办法】

    修改tomcat路径,肯定是你移动了jar包在硬盘的位置 将路径改成当前所在的文件位置

  5. 通过Span实现高性能数组,实例解析

    Span<T> 是 C# 7.2 引入的一个强大的数据结构,用于表示内存中的一块连续数据.它可以用于实现高性能的数组操作,而无需额外的内存分配.在本文中,我将详细介绍如何使用 Span&l ...

  6. 普冉PY32系列(十三) SPI驱动WS2812全彩LED

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  7. 使用Python合并多个Excel文件

    合并Excel可以将多个文件中的数据合并到一个文件中,这样可以帮助我们更好地汇总和管理数据.日常工作中,合并Excel主要有以下两种需求: 将多个Excel文件合并为一个文件 将多个Excel工作表合 ...

  8. macOS 苹果电脑双面打印单面打印PDF设置

    苹果的打印服务分为两个部分,一个是应用层另一个是系统层. 其中双面打印或单面打印统一在系统层面设置,下面我分别截图示意wps pdf和福昕pdf两款软件设置双面打印. 1.WPS PDF 在完成方式中 ...

  9. [ABC274F] Fishing

    Problem Statement On a number line, there are $N$ fish swimming. Fish $i$, which has a weight of $W_ ...

  10. 一招MAX降低10倍,现在它是我的了

    一.背景 性能优化是一场永无止境的旅程. 到家门店系统,作为到家核心基础服务之一,门店C端接口有着调用量高,性能要求高的特点. C端服务经过演进,核心接口先查询本地缓存,如果本地缓存没有命中,再查询R ...