UVA.540 Team Queue (队列)
UVA.540 Team Queue (队列)
题意分析
有t个团队正在排队,每次来一个新人的时候,他可以插入到他最后一个队友的身后,如果没有他的队友,那么他只能插入到队伍的最后。题目中包含以下操作:
1.ENQUEUE x :表示编号为x的入队;
2.DEQUEUE:长队的队首出队。
3.STOP:停止模拟
并且对于每一个DEQUEUE操作,输出队首的编号。
如果我们直接用一个队列来模拟的话,是无法实现的,原因在于,我们无法向队列中间插入元素。那么题目中还有一条重要的性质,那么就是:可以插入到他最后一个队友的身后。 有了这条性质,就可以保证每个队伍的顺序不会改变。比如说:
现在队列为空,101进队,201进队,301进队。然后102在进队,那么102一定是在101的后面;202进队,202一定会在201的后面,也就是说,队伍10X、20X、30X的相对顺序是不会改变的。
PS:这与哪个队伍首先入队的顺序有关。
PPS:上述例子认为10X为一队,20X为一队,30X位一队。
于是我们就可以分为2种队列:一种是表示队伍的队列,一种是表示队伍之间各个成员的队列。出队时,先根据队伍队列,决定是哪个队伍的成员线出队,当某队伍成员全部出队后,将这个队伍的队列销毁(即出队),看下一个是哪个队伍,再对下一个队伍的每个成员依次出队。直到停止模拟。
代码总览
#include <iostream>
#include <cstdio>
#include <queue>
#include <map>
#define nmax 1005
using namespace std;
int main()
{
//freopen("in.txt","r",stdin);
int n,cas = 1;
while(scanf("%d",&n) && n){
printf("Scenario #%d\n",cas++);
map<int,int> mmp;
for(int j = 0; j<n; ++j){
int m,t;
scanf("%d",&m);
for(int i = 0 ; i<m; ++i){ scanf("%d",&t);mmp[t] = j;}
}
char com[10];
queue<int> t,team[nmax];
while(1){
scanf(" %s",com);
if(com[0] == 'S')break;
if(com[0] == 'D'){
int temp = t.front();
printf("%d\n",team[temp].front());
team[temp].pop();
if(team[temp].empty()) t.pop();
}else if(com[0] == 'E'){
int id;
scanf("%d",&id);
if(team[mmp[id]].empty())t.push(mmp[id]);
team[mmp[id]].push(id);
}
}
printf("\n");
}
return 0;
}
UVA.540 Team Queue (队列)的更多相关文章
- UVA 540 Team Queue(模拟+队列)
题目代号:UVA 540 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page ...
- uva 540 - Team Queue(插队队列)
首发:https://mp.csdn.net/mdeditor/80294426 例题5-6 团体队列(Team Queue,UVa540) 有t个团队的人正在排一个长队.每次新来一个人时,如果他有队 ...
- UVa 540 Team Queue 【STL】
题意:给出t个团体,这t个团体排在一起,每次新来一个x排队,如果在整个的团体队列中,有x的队友,那么x排在它的队友的后面,如果他没有队友,则排在长队的队尾 求给出的每一个出队命令,输出出队的人的编号 ...
- UVA 540 Team Queue
思路:使用优先队列,按队伍出现的时刻和自身出现的时刻定义优先级,同时记录此时刻队列里是否有自己队伍的人,一开始没注意,wa了两发. #include<map> #include<qu ...
- uva 540 (Team Queue UVA - 540)
又是一道比较复杂的模拟题.题中有两种队列,一种是总队列,从前向后.其他的是各个团体的小队列,因为入队的人如果有队友的话,会优先进入团体队列. 所以我们先设置两个队列和一个map,设置map倒是可以不用 ...
- POJ 2259 - Team Queue - [队列的邻接表]
题目链接:http://poj.org/problem?id=2259 Queues and Priority Queues are data structures which are known t ...
- POJ 2259 Team Queue(队列)
题目原网址:http://poj.org/problem?id=2259 题目中文翻译: Description 队列和优先级队列是大多数计算机科学家已知的数据结构. 然而,Team Queue并不是 ...
- 团体队列UVA540 Team Queue(队列简单用法)
题目背景 队列和优先级队列是大多数计算机科学家都知道的数据结构.但是团队队列却不被人熟知,尽管在生活中经常出现.比如,午餐时间的食堂门口的队列就是一个团队队列.在一个团队队列中,每个元素属于一个团队. ...
- (队列的应用5.3.2)POJ 2259 Team Queue(队列数组的使用)
/* * POJ_2259.cpp * * Created on: 2013年10月30日 * Author: Administrator */ #include <iostream> # ...
随机推荐
- Cannot assign requested address (connect failed)
压测时,应用服务器报错:Cannot assign requested address (connect failed) 经检查,由于应用服务器,频繁发起http请求,由于每次连接都在很短的时间内结束 ...
- Java开发工程师(Web方向) - 01.Java Web开发入门 - 第1章.Web应用开发概述
第1章--Web应用开发概述 Web应用开发概述 浏览器-服务器架构(BS-architecture) browser/ App ---- request ----> server ...
- ajax 个人理解 学习笔记
W:Ajax Q:异步网络请求.无刷新请求数据. W:ajax的实现流程如下: Q: 创建XHR对象 调用open()方法,创建请求 调用send()方法,发送请求 捕获请求状态,判断请求结果 获取数 ...
- 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档
孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天终于完成了对docx模块针对 ...
- lr 常用操作
lr脚本编写语法: web_add_cookie();:服务器注入cookies lr_save_string("网址或其他","参数2");:一个保存函数,它 ...
- 实现Bidirectional LSTM Classifier----深度学习RNN
双向循环神经网络(Bidirectional Recurrent Neural Networks,Bi-RNN),Schuster.Paliwal,1997年首次提出,和LSTM同年.Bi-RNN,增 ...
- Deep Residual Learning for Image Recognition论文笔记
Abstract We present a residual learning framework to ease the training of networks that are substant ...
- Trie 树——搜索关键词提示
当你在搜索引擎中输入想要搜索的一部分内容时,搜索引擎就会自动弹出下拉框,里面是各种关键词提示,这个功能是怎么实现的呢?其实底层最基本的就是 Trie 树这种数据结构. 1. 什么是 "Tri ...
- 从SDN鼻祖Nicira到VMware NSX 网络虚拟化平台的简单探讨
以前的大二层技术,一般是在物理网络底层使用IS-IS路由技术,再在此基础之上,实现数据中心网络的二层扩展,如公有的Trill.SPB技术和Cisco私有的OTV.Fabricpath技术:前沿一些的网 ...
- ACM入门步骤(一)
一般的入门顺序: 0. C语言的基本语法(或者直接开C++也行,当一个java选手可能会更受欢迎,并且以后工作好找,但是难度有点大),[参考书籍:刘汝佳的<算法竞赛入门经典>,C++入门可 ...