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 ...
随机推荐
- Vue06-Pinia
Pinia Pinia是西班牙语piña(西班牙语中的"菠萝")单词的形似. 它是一个状态管理的库,用于跨组件.页面进行状态共享(这点和Vuex.Redux一样),同时兼容Vue2 ...
- 【uniapp】【外包杯】学习笔记day04 | 学习模板+vue相关知识+环境搭建
没啥好说的,人与人的悲欢并不相同,我只觉得吵闹. 好烦啊,虽然不应该总说一些低气压的话,不过目前预见的就是有很多工作要做,并且对于完成的希望也有点没有,就这样吧,没啥好说的. 昨天做了python的作 ...
- 有什么巨好用Excel数据分析技巧?
当涉及Excel数据分析时,以下是一些非常实用的技巧和功能,供您参考.这里将为您提供关于数据整理.数据清洗.统计分析.可视化和高级分析等方面的技巧. 一.数据整理与清洗: 导入数据:使用 Excel ...
- oracle、达梦数据库、MySQL数据创建表与字段注释
/**1.oracle注释*//*表本身注释*/comment on table 表名 is '注释信息';/*字段注释*/comment on column 表名.字段名 is '注释信息';/*实 ...
- [ABC263F] Tournament
Problem Statement $2^N$ people, numbered $1$ to $2^N$, will participate in a rock-paper-scissors tou ...
- springMvc报错
这个报错困扰了我大概一天,主要是刚开始没抓到主要原因,是因为自己的项目结构出现了问题, 导致找不到应有的东西,另一方面就是maven的问题,将maven解决后这个就能用了. 具体解决在https:// ...
- SpringBoot整合SpringSecurity实现前后端分离认证授权
1.什么是SpringSecurity? Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架.它实际上是保护基于spring的应用程序的标准. Spring Securi ...
- 神奇的 SQL ,高级处理之 Window Functions → 打破我们的局限!
开心一刻 今天儿子跟老婆聊天 儿子:妈妈,我为什么没有两个爸爸呀 老婆:每个人都只有一个爸爸呀,你看谁有两个爸爸了 儿子一脸真诚的看着老婆:那你为什么就有两个爸爸呢 老婆一脸疑惑的望向儿子:我哪有两个 ...
- transformer模型
Transformer由谷歌团队在论文<Attention is All You Need>提出,是基于attention机制的模型,最大的特点就是全部的主体结构均为attention. ...
- ElasticSearch给索引起"别名"和其重要性
创建别名: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/indices-aliases.html 我们有时候并不能确保索引库 ...