#XMOJ11708. 旋转寿司店模拟
旋转寿司店模拟
说明
时间限制:1 Sec
内存限制:256 MB
输入文件:sushi.in 输出文件:sushi.out
我们需要对旋转寿司店进行简易模拟。
店内座位编号为 $1$ 至 $20$。
开店后会有客人到店并坐到座位上。每位客人持有一份想吃的菜品清单(存在极端客人,例如清单里包含十份鰯鱼)。当传送带送来清单里有的寿司时,客人一定会取走一碟,并从自己的清单中删除一份该寿司。
寿司一碟一碟地沿着传送带,依次经过 $1$ 号到 $20$ 号座位,如果全程没有客人取走,这碟寿司会被丢弃。
所有数据按时间顺序逐行给出,数据分为以下三种类型:
1. 类型 $0$:座位 $i$ 迎来一位客人,并给出该客人想吃的菜品清单。
2. 类型 $1$:一碟寿司放上传送带,按顺序经过座位 $1$ 到 $20$。
3. 类型 $2$:坐在座位 $i$ 的客人结账离店。
保证不会出现同一座位同时有多位客人、空座位的客人结账离开的情况。
每当给出类型1的数据时,你需要输出取走这碟寿司的客人对应的座位编号,单独一行。
如果全程无客人取走,输出 $-1$。
存在数据第一条就是类型 $1$ 的情况。
输入格式
第一行一个整数 $N$,代表数据的总条数,满足 $2 \le N \le 5005$。
接下来 $N$ 行,每行一条数据 $U_i$,分为三种格式:
类型 $0$ 输入格式
一行形如 $0$ $n_i$ $m_i$ $A_{i,1}$ $\dots$ $A_{i,m_i}$
含义:座位 $n_i$ 坐下一位客人,该客人的清单共有 $m_i$ 道菜品。
$A_{i,j}$ 是客人想吃的寿司名称。
约束:
$1 \le n_i \le 20$
$1 \le m_i \le 10$
$A_{i,j}$ 由小写英文字母构成,长度不超过 $17$。
类型 $1$ 输入格式
一行形如 $1$ $B_i$
含义:名称为 $B_i$ 的一碟寿司放上传送带,依次经过座位 $1$ 至 $20$。
当经过某座位时,若当前客人的清单内存在该寿司,则客人取走这一碟,并从清单中减少一份该寿司。
例如客人清单里有两份鰻鱼,取走一份后剩余一份;原本只有一份,则取走后清单不再包含鰻鱼。
$B_i$ 是由小写字母组成的寿司名称。
类型 $2$ 输入格式
一行形如 $2$ $C_i$
含义:座位 $C_i$ 的客人结账离开,该客人的菜品清单直接作废。
约束:$1 \le C_i \le 20$
所有输入数据均以空格分隔。
店内固定共 $20$ 个座位。
寿司名称由小写字母组成,最长 $17$ 个字符,保证最多存在 $53$ 种不同寿司。
输出格式
对于每一条类型 $1$ 的数据,单独一行输出取走寿司的座位编号;若全程无人取走,输出 $-1$。
样例
样例 1
11
1 toro
1 unagi
0 14 4 maguroakami hotatekai unagi maguroakami
1 saamonnmottu
1 unagi
1 unagi
1 maguro
1 kouika
1 maguroakami
1 maguroakami
2 14
-1
-1
-1
14
-1
-1
-1
14
14
样例说明:
前两碟寿司到店时店内没有客人,直接丢弃,输出 。
之后只有 $14$ 号座位有客人。
传送带先后送来两份鳗鱼寿司,客人清单内仅需要一份鳗鱼,因此第二份鳗鱼客人不会取。
传送带送来两份赤身金枪鱼寿司,客人清单内需要两份,因此两份都会被客人取走。
其余寿司都不在客人清单内,直接丢弃。
样例 2
15
0 14 4 maguroakami hotatekai unagi maguroakami
1 hotatekai
1 hotatekai
0 15 3 maguroakami saamonnmottu hotatekai
1 hotatekai
1 saamonnmottu
1 unagi
1 unagi
1 maguro
1 kouika
1 maguroakami
2 14
1 maguroakami
1 maguroakami
2 15
14
-1
15
15
14
-1
-1
-1
14
15
-1
样例说明:
客人一共需要三份赤身金枪鱼寿司,但 号座位的客人提前结账离开,因此第三份赤身金枪鱼无人取走。
其余流程可自行推演。
题目保证存在客人离开后,该座位再次迎来新客人的情况。相关
在下列比赛中: