AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0012. 水晶契约与发货仪式

中等通过率 60% · 提交 222 · 通过 134
哈希表模拟排序

在 魔能市集 中,小慕负责管理一套神秘的 魔法订购系统,帮助魔法师们购买所需的魔法物资。订购完成后,市集会按照魔法规则发货并更新订购状态。然而,发货时需要特别的魔法仪式,而所有物资的管理也必须遵循严格的顺序。 请设计一个支持以下操作的 魔法订购系统: 1. 水晶初始化 用于初始化魔法订购系统,清空所有历史数据。 2. 魔法订购 - 参数:`魔法师ID`、`订购物资类型`(可以为多个类型)。 - 每个魔法师可以订购任意数量的物资类型,物资可以重复订购。相同类别的物资如果已经订购了,再订购,则忽略这类物资。 - 系统会记录魔法师的订购信息,等待发货。 3. 发货仪式 - 参数:`物资类型`(一次仅发货一种类型)。 - 如果多个魔法师订购了该类型的物资,视为 所有相关魔法师均收到该物资。 - 系统会更新对应魔法师的订购状态,将已发货的物资从他们的待发货列表中移除。 4. 魔法查询 - 系统按照以下规则返回所有魔法师的ID: - 按照 降序 排列。 - 如果未发货数量相同,则按照 魔法师ID升序 排列。

提示:带虚线的词点一下有通俗解释。

输入描述

1. 第一行包含整数 `Q`,表示操作的数量。 2. 接下来的 `Q` 行表示若干操作,具体格式如下: - `MagicOrderSystem` 初始化系统操作。 - `place_order`:随后输入一个整数 `wizard_id` 和一个整数 `items` 的长度,接着是`items`数组。 - `deliver_item`:随后输入一个整数 `item_type`。 - `query_status`:查询所有魔法师的订购状态。

输出描述

1. 对于 `MagicOrderSystem` 操作,输出 `null`。 2. 对于 `place_order` 操作,输出这个魔法师当前订购物资类型数量。 3. 对于 `deliver_item` 操作,输出需要向多少个魔法师发货。 4. 对于 `query_status` 操作,按规则返回所有魔法师的订购状态(具体格式见样例输出)。

示例

示例 1

输入

9
MagicOrderSystem
place_order
1
3
101 102 103
place_order
2
2
102 104
place_order
3
1
101
deliver_item
102
query_status
place_order
4
2
101 105
deliver_item
101
query_status

输出

null
3
2
1
2
1 2 3
2
3
1 2 4 3

说明:MagicOrderSystem() place_order(1, [101, 102, 103]) place_order(2, [102, 104]) place_order(3, [101]) deliver_item(102) query_status() place_order(4, [101, 105]) deliver_item(101) query_status()

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
魔法订购系统示例(发货仪式与查询排序)初始:魔法师1订了[101,102,103],魔法师2订了[102,104],魔法师3订了[101]发货仪式(102):魔法师1和2都收到102,移除102查询:未发货数量:魔法师1有2种(101,103),魔法师2有1种(104),魔法师3有1种(101)按数量降序、ID升序输出:1 2 3魔法师1魔法师2魔法师3未发货:2种未发货:1种未发货:1种排序:第1排序:第2排序:第3数量多→前数量相同ID小→前输出顺序:1 2 3(魔法师1未发货2种最多,魔法师2和3都是1种,但ID 2 < 3,所以2在前)
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「水晶契约与发货仪式」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。