题意

link(more:UVA540

简化题意:对 \(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.小组队列的更多相关文章

  1. P2776 [SDOI2007]小组队列

    P2776 [SDOI2007]小组队列 题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一 ...

  2. luogu P2776 [SDOI2007]小组队列

    题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一提的是,标程是我自己做的.. 很渣,因为数 ...

  3. 洛谷P2776 [SDOI2007]小组队列 链表 + 模拟

    有些细节需要注意: 1.编号和元素种类都从0开始标号. 2.需要特判一下队列被弹空的情况. Code: #include<cstdio> #include<cstring> u ...

  4. 【数据结构】洛谷2019 OI春令营 - 普及组 作业

    [P3662][USACO17FEB]Why Did the Cow Cross the Road II S 求解连续的k个数的最大值,利用前缀和维护即可. #include<bits/stdc ...

  5. 0x12 队列

    感觉和栈那一讲一样简单啊.. poj2259 这个乱搞硬模拟吧...没更新last WA了N次...(叫你懒得写拍) #include<cstdio> #include<iostre ...

  6. [0x12] 135.最大子序和【单调队列】

    我在知乎上看到一句话,如一道晴天霹雳: "如果一个选手比你小还比你强,你就可以退役了."--单调队列的原理 题意 link(more:P1714) 给定一个长度为 \(n\) 的整 ...

  7. 基于ZooKeeper的分布式锁和队列

    在分布式系统中,往往需要一些分布式同步原语来做一些协同工作,上一篇文章介绍了Zookeeper的基本原理,本文介绍下基于Zookeeper的Lock和Queue的实现,主要代码都来自Zookeeper ...

  8. vmware linux top si高以及网卡队列、软负载相关优化

    今日,测试公司自行开发的一rpc中间件,期间发现top si的比例很高,且几乎只有一个cpu是繁忙的,其他均基本为0. 经查,si主要是系统软中断,最后确定是网卡导致的系统中断.于是,往上搜了下资料, ...

  9. BZOJ 1855 股票交易(单调队列优化DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1855 题意:最近lxhgww又迷上了投资股票, 通过一段时间的观察和学习,他总结出了股票 ...

随机推荐

  1. BinaryBombs(二进制炸弹实验)

    实验介绍 使用所学知识拆除Binary Bombs来增强对程序的机器级表示.汇编语言.调试器和逆向工程等理解. Binary Bombs(二进制炸弹)是一个可执行程序,是C语言编译链接成的,包含pha ...

  2. TomCat之负载均衡

    TomCat之负载均衡 本文讲述了tomcat当nginx负载均衡服务器配置步骤 以下是Tomcat负载均衡配置信息 1.修改nginx的nginx.conf文件 添加如下属性:localhost是名 ...

  3. 树莓派Zero 2 W(ubuntu-22.04)通过.NET6和libusb操作USB读写

    有这个想法的初衷 喜欢电子和DIY硬件的朋友对稚晖君应该都不陌生,他定期都会分享一些自己做的好玩的硬件,他之前做了一个ElectronBot桌面机器人我就很感兴趣,所以就自己也做了一个. 起初我只是自 ...

  4. esp32把玩记-④ 星星点灯 (点亮led)

    注意 全程使用Micropython,不会安装看我第一篇文章感谢 正式开始 用Thonny烧录(运行)以下代码 import time from machine import Pin led=Pin( ...

  5. 18.MongDB系列之批量更新写入Python版

    在实际的工作中,难免批量更新的数量极大,pymongo提供了便捷的客户端供使用 假设读者对pandas比较熟悉,下图为事先准备好的dataframe import pandas as pd from ...

  6. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(29)-Fiddler如何抓取Android7.0以上的Https包-终篇

    1.简介 上一篇宏哥介绍的Xposed是一款可以在不修改APK的情况下影响程序运行的框架.可以编写并加载自己编写的插件app,实现对目标apk的注入.拦截等.一般研究移动安全的都会使用Xposed. ...

  7. C++ lower_bound/upper_bound用法解析

    1. 作用           lower_bound和upper_bound都是C++的STL库中的函数,作用差不多,lower_bound所返回的是第一个大于或等于目标元素的元素地址,而upper ...

  8. Codeforces Round #805 (Div. 3)G2. Passable Paths

    题目大意: 给出一个无向无环连通图(树),n个点n-1条边,m次查询,每次询问给出一个集合,问集合里的树是否都在同一条链上(即能否不重复的走一条边而遍历整个点集) 思路:通过求lca,若有三个点x,y ...

  9. JavaWeb2

    1. web服务器软件:Tomcat 1.1 概述 服务器:安装了服务器软件的计算机 服务器软件:接受用户的请求,处理请求,做出响应 web服务器软件:接受用户的请求,处理请求,做出响应 在web服务 ...

  10. Codeforces Round #817 (Div. 4)

    CF传送门 因为洛谷题库未更新,所以给出的题面都是CF的. 现场打真是太卡了(梯子挂了,codeforc.es也崩了),所以五六分钟才打开题目 \(qwq\) A. Spell Check 萌萌题,把 ...