解题思路
需要用到两种队列,一个是que小组编号队列来确定小组的先后,一个是a队列来表示目前在排队中的小组队列。
然后使用hs快速获得某人编号所对应的小组编号,book来标记该小组是否已在队列中了。
ENQUEUE有两种情况:
- x对应的小组编号tid未在que中,那么标记book并且在que中插入该小组编号。
- x对应的小组编号tid在排队队列中,那就直接插队,插队相当于将x插入a[tid]队列中。
DEQUEUE:直接在a[tid]队列中弹出一个元素即可,即h[tid]++。如果h[tid] == t[tid]说明该小组已经没人在排队了,那么就直接弹出que的队头即可(因为有遵循队列先后顺序)。
#include<iostream>
#include<unordered_map>
#include<cstring>
using namespace std;
const int N = 1010, M = 1000000;
//a是队列数组,que是小组id的队列
int a[N][N], que[N], h[N], t[N], hh, tt;
bool book[N