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> # ... 
随机推荐
- PyCharm添加Selenium与Appium类库
			PyCharm添加Selenium与Appium依赖, 不需要用pip去安装! 
- APP九宫格滑动解锁的处理
			写手机自动化测试脚本关于APP九宫格滑动解锁方面采用了appium API 之 TouchAction 操作. 先是用uiautomatorviewer.bat查询APP元素坐标: 手工计算九宫格每个 ... 
- Kotlin的密封(Sealed)类:超强的枚举(KAD 28)
			作者:Antonio Leiva 时间:Jun 27, 2017 原文链接:https://antonioleiva.com/sealed-classes-kotlin/ Kotlin的封装类是Jav ... 
- es6笔记4^_^function
			一.function默认参数 现在可以在定义函数的时候指定参数的默认值了,而不用像以前那样通过逻辑或操作符来达到目的了. es5 function sayHello(name){ //传统的指定默认参 ... 
- 158. Valid Anagram【LintCode by java】
			Description Write a method anagram(s,t) to decide if two strings are anagrams or not. Clarification ... 
- 【token接口】-jmeter
			token 接口 3步骤 1.登录接口 2.提取登录接口的token 3.http 信息管理头 把提取的cookie传入 就可以了 
- 【springmvc+mybatis项目实战】杰信商贸-3.需求分析与数据库建模
			开发步骤需求:生产厂家信息维护基础表FACTORY_C 1.业务需求:a)<需求说明书> 1)描述业务功能 生产厂家模块 功能:为在购销合同模块中的货物信息和附件信 ... 
- 微信小程序navigator跳转失效
			在编写小程序时遇到一个问题:使用 <navigator url='/pages/lists/index'>...</navigator>进行跳转没有反应.控制台也没有报错,ap ... 
- visionpro吧-百度贴吧
			Halcon,Visionpro视频教程,观看下载地址:http://www.211code.com 
- #pragma pack(n)对齐格式
			#pragma pack(n)对齐格式 #pragma pack(n) 是预处理器用来指定对齐格式的指令,表示n对齐.当元素字节小于n时,要扩展到n:若元素字节大于n则占用其实际大小. struct ... 
