P16268 [蓝桥杯 2026 省 Java B 组] 游戏指令解析器

题目描述

某款冒险游戏维护了一个指令库,其中包含 $n$ 条互不相同的完整指令。 玩家会依次输入 $m$ 条字符串作为输入指令。输入指令可以是完整指令本身,也可以是某条完整指令的前缀(从第 1 个字符开始连续匹配)。 对于每条输入指令 $s$,定义它与指令库的匹配结果如下: - 若存在且仅存在一条完整指令 $c$ 满足:$s$ 是 $c$ 的前缀,则认为 $s$ **唯一匹配**到 $c$,系统执行该指令,并输出 $c$。 - 若有两条或以上的完整指令都以 $s$ 作为前缀,则认为 $s$ **多重匹配**,输出 `ambiguous`。 - 若指令库中不存在任何以 $s$ 为前缀的完整指令,则认为 $s$ **无法匹配**,输出 `unknown`。 现在,请你对玩家输入的每条指令,按上述规则输出其匹配结果。

输入格式

第一行包含两个整数 $n, m$,分别表示指令库中的完整指令数量,以及玩家输入指令的数量。 接下来 $n$ 行,每行一个字符串,表示一条完整指令。 接下来 $m$ 行,每行一个字符串,表示一条输入指令。

输出格式

输出 $m$ 行。第 $i$ 行对应第 $i$ 条输入指令的匹配结果: - 唯一匹配:输出对应的完整指令; - 多重匹配:输出 `ambiguous`; - 无法匹配:输出 `unknown`。

说明/提示

### 【样例说明 1】 指令库为:`attack`、`defend`、`move`、`magic`、`examine`、`exit`。 - `att` 是 `attack` 的前缀,且仅匹配这一条,输出 `attack`。 - `def` 仅匹配 `defend`,输出 `defend`。 - `mov` 仅匹配 `move`,输出 `move`。 - `ex` 同时匹配 `examine` 与 `exit`,属于多重匹配,输出 `ambiguous`。 - `e` 同时匹配 `examine` 与 `exit`,输出 `ambiguous`。 ### 【样例说明 2】 - `op` 同时匹配 `open` 与 `operate`,输出 `ambiguous`。 - `clo` 仅匹配 `close`,输出 `close`。 - `un` 仅匹配 `unlock`,输出 `unlock`。 - `cast` 无法匹配任何完整指令,输出 `unknown`。 ### 【评测用例规模与约定】 对于 $30\%$ 的评测用例,$n \leq 10$,$m \leq 10$; 对于 $60\%$ 的评测用例,$n \leq 50$,$m \leq 50$; 对于所有评测用例,$1 \leq n \leq 100$,$1 \leq m \leq 100$; 保证所有指令名称和输入指令的长度均在 $[1, 20]$ 之间,所有字符串仅包含小写英文字母,指令库中的完整指令互不相同。