[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又迷上了投资股票, 通过一段时间的观察和学习,他总结出了股票 ...
随机推荐
- P7962 [NOIP2021] 方差 (DP)
题目的意思就是可以交换差分数组,对答案进行化简:n∑ai2−(∑ai)2 ,再通过手玩分析可得最优解的差分数组一定是单谷(可以感性理解一下),因此我们将差分数组排序,依次加入,每次可以选择加在左边 ...
- SSM整合以及相关补充
SSM整合以及相关补充 我们在前面已经学习了Maven基本入门,Spring,SpringMVC,MyBatis三件套 现在我们来通过一些简单的案例,将我们最常用的开发三件套整合起来,进行一次完整的项 ...
- Docker | 使用dockerfile生成镜像,清理docker空间
用dockerfile生成镜像并挂载数据卷 编写dockerfile文件 创建dockerfile01 文件 # 基础镜像 FROM centos VOLUME ["volume01&quo ...
- Linux基础_3_文件/文件夹权限管理
注:权限遮罩码: 控制用户创建文件和文件夹的默认安全设置,文件默认权限为666-umask的值,文件夹默认权限为777-umask的值. root默认0022,普通用户默认0002. 文件的默认权限不 ...
- 基于 Redis 生成分布式订单号
环境依赖: //spingBoot <version>2.6.6</version> //jdk11 <dependency> <groupId>org ...
- 大文件分片上传,后端拼接保存(前端:antd;后端:.Net 5 WebAPI)
前言 对于普通业务场景而言,直接用 FormData() 将文件以入参的一个参数传给后端即可,但此方法有一个弊端就是,有个 30M 的上限. 对于动辄几百 M.几个 G 的文件上传需求,FormDat ...
- Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)
一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...
- Linux环境下执行脚本重启Weblogic控制台中部署的应用程序
之前有写过一篇博文介绍切换登录方式的脚本,脚本中存在一个缺点:仍需手动去Weblogic控制台重启应用程序:本文即介绍如何在脚本中更新Weblogic控制台中部署的应用程序. 一.配置Weblogic ...
- kubeEdge的MetaManager模块简介
MetaManager 是edged和edgehub之间的消息处理器,它还负责将元数据存储到轻量级数据库SQLite或从中检索元数据(metadata). 根据以下不同的operation接收不同类型 ...
- 谈软件-Java重构案例之Switch_Statements
1.软件重构,大量swich语句如何重构 2.使用 ide 使用 快捷键ctrl+alt+shift+T调出重构菜单,选择method对之前的for循环重构一个method 3.得到一个新的方法,使用 ...