UVA540 Team Queue(双queue)
题目大意
有一条长队,每个人均唯一属于一个组(有编号),执行给定操作序列,输出相应结果。操作如下:
(假设长队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)的更多相关文章
- UVA540 Team Queue——题解 by hyl天梦
UVA540 Team Queue 题解 题目描述:题目原题 https://vjudge.net/problem/UVA-540 Queues and Priority Queues are dat ...
- UVa540 Team Queue
// 题意:有t个团队的人在排队.每次来了一个新人之后,如果他有队友在排队,那么这个新人会插队到队友的身后. // 要求支持三种指令:ENQUEUE x; DEQUEUE(队首出队); STOP.模拟 ...
- 团体队列UVA540 Team Queue(队列简单用法)
题目背景 队列和优先级队列是大多数计算机科学家都知道的数据结构.但是团队队列却不被人熟知,尽管在生活中经常出现.比如,午餐时间的食堂门口的队列就是一个团队队列.在一个团队队列中,每个元素属于一个团队. ...
- uva540 Team Queue by sixleaves
这道题目.主要是对队列的灵活应用.其实就是一道模拟题目,只要你洞察出题目的本质就十分简单.题目意思大体是有多组测试数据,每组的一开始是一个数字t,代表一共有多少的团队,接着是t行输入,每一行都由一个数 ...
- 团体队列 UVA540 Team Queue
题目描述 有t个团队的人正在排一个长队.每次新来一个人时,如果他有队友在排队,那么新人会插队到最后一个队友的身后.如果没有任何一个队友排队,则他会被排到长队的队尾. 输入每个团队中所有队员的编号,要求 ...
- ACM学习历程——UVA540 Team Queue(队列,map:Hash)
Description Team Queue Team Queue Queues and Priority Queues are data structures which are know ...
- UVa540 Team Queue(队列queue)
队列 STL队列定义在头文件<queue>中, 用“ queue<int>s ” 方式定义, 用push()和pop()进行元素的入队和出队操作, front()取队首元素(但 ...
- ZOJ2724 Windows Message Queue 裸queue的模拟
题目要求FIFO #include<cstdio> #include<cstdlib> #include<iostream> #include<queue&g ...
- [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 ...
- prequeue receive queue backlog queue
prequeue和backlog和receive 5.6 TCP prequeue http://blog.csdn.net/u011130578/article/details/44814201 t ...
随机推荐
- 【scipy 基础】--空间计算
scipy.spatial子模块提供了一系列用于处理和计算空间数据和几何形状的算法和工具,在许多领域都有广泛的应用,例如计算机视觉.地理信息系统.机器人学.医学影像分析等. 下面,来具体看看scipy ...
- Pipeline模式应用
本文记录Pipeline设计模式在业务流程编排中的应用 前言 Pipeline模式意为管道模式,又称为流水线模式.旨在通过预先设定好的一系列阶段来处理输入的数据,每个阶段的输出即是下一阶段的输入. 本 ...
- 基于 Webpack5 Module Federation 的业务解耦实践
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:贝儿 前言 本文中会提到很多目前数栈中使用的特定名词,统一 ...
- python操作mongodb实现读写分离
读写分离 默认情况下,MongoClient 实例将查询发送到副本集的主要成员. 要使用副节点作为查询,以实现读写分离,我们必须更改读取首选项: 读取首选项在模块pymongo.ReadPrefere ...
- 2023"安洵杯"第六届网络安全挑战赛-Misc WP
dacongのsecret 题目 我的解答: 题目给出一张png图片和一个加密压缩包,压缩包里面还存在另一张jpg图片 看名字就知道是盲水印.由于压缩包里的图片提不出来,因此是单图盲水印,我们使用工具 ...
- 查看电脑、手机中已保存的wifi密码
电脑: 以管理员身份运行CMD,执行 netsh wlan show profile netsh wlan export profile folder=C:\ key=clear 此时,用记事本打开对 ...
- Pikachu漏洞靶场 URL重定向
URL重定向 点击 我就是我,放荡不羁的我 可以发现url是这样的: http://192.168.171.30/pikachu/vul/urlredirect/urlredirect.php?url ...
- 什么是Helm?它是如何提升云原生应用私有化部署效率的
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享 试想一下,如果有一个项目有50 个微服务,每个微服务都有service.deployment.ingress.pvc等 ya ...
- 用C#实现简单的线性回归
前言 最近注意到了NumSharp,想学习一下,最好的学习方式就是去实践,因此从github上找了一个用python实现的简单线性回归代码,然后基于NumSharp用C#进行了改写. NumSharp ...
- Spring源码学习笔记4——BeanFactoryPostProcessor执行
一丶BeanFactoryPostProcessor是什么 Spring留给我们的一个扩展接口,在BeanDefinition加载注册完之后,并执行一些前置操作(笔记3)之后会反射生产所有的BeanF ...