[0x12] 132.小组队列
题意
简化题意:对 \(n\) 个小组排队,每个小组有至多 \(m\) 个成员(每个成员有唯一编号 \(x\)),当一个人来到队伍时,如果队中有同组成员,直接插入其后,否则插入队尾。给定 \(q\) 个入队和出队指令,输出出队顺序。
其中,每个样例有多组用例, \(1\leqslant n,m \leqslant10^3;0\leqslant x<10^6;q\leqslant2\times10^5.\)
思路
首先,易想到需要维护两个队列:
- 设 \(q0_i\) :存第 \(i\) 个队内成员的排列;
- 设 \(q1\) : 存各队伍之间的排列;
∵对于每次输入一个 \(x\) 对其进行入队操作,需要知道它的队伍编号;
∴可以设数组 \(id_i\) 存编号为 \(i\) 的人的队伍编号。
入队操作
易想到对于 \(q1\) 中的每个队伍,我们其实只需要存其队头即可,而后的所有同队成员,可以直接存入本队队列即可,降低思维难度;
∴我们只需维护第一个该队伍进入队列的人即可,换言之,即知道队伍编号的前后顺序足矣。
出队操作
对于 \(q1\) 对头元素,由前文可知,是该队的编号;
∴我们只需每次弹出队头所指队伍的队头元素,若空,则表示 \(q0_i\) 在 \(q1\) 中已空,继而弹出 \(q1\) 的队头元素即可继续下一个队伍。
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10,M=1e6+10;
int id[M];
queue<int> q0[N],q1;
void init1()
{
while(!q1.empty()) q1.pop();
memset(id,0,sizeof(id));
}
void init0(int i)
{ while(!q0[i].empty()) q0[i].pop(); }
int main()
{
int n,step=1;
while(cin>>n && n!=0)
{
init1();
printf("Scenario #%d\n",step++);
for(int i=1;i<=n;i++)
{
init0(i);
int len;
cin>>len;
for(int j=1,x;j<=len;j++)
{
cin>>x;
id[x]=i;
}
}
string s;
while(cin>>s && s!="STOP")
{
if(s=="ENQUEUE")
{
int add,k;
cin>>add;
k=id[add];
if(q0[k].empty()) q1.push(k);
q0[k].push(add);
}
else
{
int out=q1.front();
printf("%d\n",q0[out].front());
q0[out].pop();
if(q0[out].empty()) q1.pop();
}
}
cout<<endl;
}
return 0;
}
[0x12] 132.小组队列的更多相关文章
- P2776 [SDOI2007]小组队列
P2776 [SDOI2007]小组队列 题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一 ...
- luogu P2776 [SDOI2007]小组队列
题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一提的是,标程是我自己做的.. 很渣,因为数 ...
- 洛谷P2776 [SDOI2007]小组队列 链表 + 模拟
有些细节需要注意: 1.编号和元素种类都从0开始标号. 2.需要特判一下队列被弹空的情况. Code: #include<cstdio> #include<cstring> u ...
- 【数据结构】洛谷2019 OI春令营 - 普及组 作业
[P3662][USACO17FEB]Why Did the Cow Cross the Road II S 求解连续的k个数的最大值,利用前缀和维护即可. #include<bits/stdc ...
- 0x12 队列
感觉和栈那一讲一样简单啊.. poj2259 这个乱搞硬模拟吧...没更新last WA了N次...(叫你懒得写拍) #include<cstdio> #include<iostre ...
- [0x12] 135.最大子序和【单调队列】
我在知乎上看到一句话,如一道晴天霹雳: "如果一个选手比你小还比你强,你就可以退役了."--单调队列的原理 题意 link(more:P1714) 给定一个长度为 \(n\) 的整 ...
- 基于ZooKeeper的分布式锁和队列
在分布式系统中,往往需要一些分布式同步原语来做一些协同工作,上一篇文章介绍了Zookeeper的基本原理,本文介绍下基于Zookeeper的Lock和Queue的实现,主要代码都来自Zookeeper ...
- vmware linux top si高以及网卡队列、软负载相关优化
今日,测试公司自行开发的一rpc中间件,期间发现top si的比例很高,且几乎只有一个cpu是繁忙的,其他均基本为0. 经查,si主要是系统软中断,最后确定是网卡导致的系统中断.于是,往上搜了下资料, ...
- BZOJ 1855 股票交易(单调队列优化DP)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1855 题意:最近lxhgww又迷上了投资股票, 通过一段时间的观察和学习,他总结出了股票 ...
随机推荐
- 大数据常用的Linux命令
Linux文件系统基础知识 要想熟练使用命令,就先要熟练掌握Linux文件系统基础知识: 三个路径 当前路径:也叫当前工作目录,就是当前状态下用户所处的位置 相对路径:相对于当前工作目录开始的路径,会 ...
- ARC148游记
A - mod M 题目链接 这道题我们可以首先对于所有的数 $%2$ ,可以证明出答案最多不超过 $2$ ,此时我们就可以把问题转化为:是否存在一个数使得序列 $a$ 中所有元素减去这个数之后的最大 ...
- Python全栈工程师之从网页搭建入门到Flask全栈项目实战(1) - ES6标准入门和Flex布局
1.简述 1.什么是ES6?ES6, 全称 ECMAScript 6.0,是 JavaScript 的下一个版本标准,2015年6月份发版.ES6的主要目的是为了解决 ES5 的先天不足. 2.了解E ...
- Linux、Windows下Redis的安装即Redis的基本使用详解
前言 什么是Redis Redis是一个基于内存的key-value结构数据库.Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母 ...
- 图解不同版本的HTTP协议
前言 大家好,我是蜗牛,今天我们聊聊HTTP协议,通过这篇文章我们能了解到不同版本HTTP优缺点.他们之间的性能差异以及现在主流的HTTP协议用的那个版本 HTTP/1.1 时代 HTTP/1.1 对 ...
- python基础之常用数据类型和字符串
一.数据类型 在python3中有六大标准数据类型:Numbers(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionaries(字典). 其中: ...
- Sql Server 数据库分页存储过程书写
create proc 存储过程名称( @page int, //pageindex @rows int, //pagesize @rowCount int out)as begin--定义字符串变量 ...
- 浅谈--ETCD的基本概念及用法
1. 简介 ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现. raft是一个强一致的集群日志同步算法. ETCD使用gRPC,网络 ...
- Transformer 结构分析
self-attetion 1. 输入 \[X = EmbeddingLookup(X) + PositionalEncoding \\ X.shape == (batch\_size, seq\_l ...
- python中的if条件语句
# 如果...就... # 1. print('1.') if 1+1 == 2: print('1+1是等于2的') print('1+1还是等于2的') print('1+1就等于2的') # 2 ...