P14713 [ICPC 2023 Tehran R] Monster Warehouse
题目描述
:::align{center}

:::
Mike 和 Sally 在怪兽电力公司的仓库担任管理员。他们的日常任务是处理入库请求并更新仓库库存。请求仅包括购买、出售、拆箱和装箱容器。仓库包括货物和容器,且空间无限。一个容器可以包含货物或其他容器作为子容器。
请求的具体格式如下。
- BUY ``
- SELL ``
- UNPACK ``
- PACK ``
每个不位于任何其他容器内的容器都由一个唯一的正整数 ID 标识。为容器分配 ID 是顺序进行的,从 $1$ 开始。一个 ID 有效当且仅当其容器存在于仓库中,否则无效。
容器描述用括号括起来,并列出了内容,内容可以是货物或子容器。货物仅通过其名称标识,名称由不区分大小写的英文字母组成。同一种货物可能有多单位。为了表示数量,可在货物名称前或后放置一个正整数 'N'(用一个空格分隔),其中 $N < 100$ 是货物的数量。例如,$((tomato, potato), 4 celery, (wood, (silk 3, banana 2)))$ 描述了一个包含四单位芹菜和两个子容器的容器。
每个请求的描述如下:
- BUY:一个新的容器被转移到仓库中,并分配一个 ID。
- SELL:将具有给定 ID 的现有容器运出,其 ID 变为无效。
- UNPACK:从容器中提取所有货物和子容器,并将其添加到仓库中。此外,子容器成为新容器并获得自己的 ID。为新容器分配 ID 基于它们在容器描述中出现的顺序(从左到右)。例如,将以下两行作为前两个请求处理,会导致添加一单位芹菜,并向仓库添加三个 ID 为 $2$、$3$ 和 $4$ 的容器,且 ID $1$ 变为无效。
$$
\text{BUY (celery, (Banana), (Celery), (celery))} \\
\text{UNPACK 1}
$$
- PACK:将 PACK 请求中指定的货物分组到一个新容器中,然后分配下一个可用的 ID。
Mike 和 Sulley 按照接收顺序处理请求。任何具有无效容器 ID 的请求都必须被丢弃。此外,对于 PACK 请求,他们需要检查仓库中每种货物是否有足够的数量。
怪兽电力公司的特工 Roz 曾对 Mike 说过:“我在看着你,瓦索斯基。一直看着,始终看着。”她把她的办公桌推进了他们的办公室,并要求查看请求和报告。她关注每一个细节。她正在审查每个请求,并可能提出一些问题。她的问题可能是以下几种类型之一:
- `? COUNT `:给定货物有多少单位存在于容器之外?
- `? CONTAINS `:有多少个容器(具有 ID)包含给定货物,即货物在容器内,或存在一个递归的子容器包含该货物。
- `? MIN `:至少需要拆开多少个容器才能得到一单位该货物。如果不可能,则答案为 $-1$。
Mike 和 Sulley 需要使用一个整数来回答这些查询。
在帮助 Mike 和 Sulley 之前,请仔细阅读样例。
输入格式
输入包含 $n$ 个来自 Roz 审查期间的请求或查询 ($1 \leq n \leq 5000$);每个占一行。每种货物的名称长度限制为 $100$ 个字符。每个容器描述最多有 $5000$ 个字符,且输入总大小小于 $10^6$ 个字符。
输出格式
报告中的每一行与一个请求或 Roz 的问题相关联。对于每个 BUY、SELL、PACK、UNPACK 请求,如果请求未被丢弃,则打印 OK。否则打印 DISCARD。如果请求是 UNPACK,则在打印 OK 之后,打印添加到仓库的容器数量(更多细节请阅读样例)。对于 Roz 的每个查询,只需在一行中打印一个整数。
说明/提示
翻译由 DeepSeek V3 完成