在 星穹学院,小慕负责维护一个 知识图谱引擎,用于管理 项目ID 与 技术标签 的,并能高效检索符合查询条件的项目。 作为一名 算法工程师,小慕需要完成这个智能系统的构建,确保所有项目能够正确归档,并在需要时被快速定位。 你需要实现一个标签管理系统,该系统维护 项目ID 与 技术标签 的绑定关系,并支持以下三种指令: 1. `addWord project_id tags` - 向项目 `project_id` 绑定 `tags`。 - 如果 `project_id` 尚未被登记,则新建该项目并绑定 `tags`; - 如果 `project_id` 已存在,则向其添加 `tags`(不能重复)。 - 返回 该项目当前绑定的 标签总数。 2. `delWord project_id tags` - 从项目 `project_id` 中移除 `tags`。 - 如果 `project_id` 或 `tags` 不存在,则无操作; - 如果 `project_id` 绑定的所有标签都被删除,则从系统中移除该 `project_id`。 - 返回 该项目当前绑定的 标签总数(若 `project_id` 不存在,则返回 `0`)。 3. `query tags` - 查询包含所有 `tags` 的项目 `project_id`。 - 以 返回所有满足条件的项目 `project_id`。 - 若无匹配,返回 `-1`。
提示:带虚线的词点一下有通俗解释。
输入描述
- **第一行** 输入整数 `Q`,表示指令的数量。 - 接下来的 `Q` 组指令,每组格式如下: - `"SearchEngine"` **(仅在第一行出现,表示系统初始化,输出 `"null"`)** - `"addWord"` - `book_id`(书籍ID) - `n`(关键词数量) - `n` 个 **魔法关键词** - `"delWord"` - `book_id`(书籍ID) - `m`(待删除的关键词数量) - `m` 个 **待删除的魔法关键词** - `"query"` - `k`(查询关键词数量) - `k` 个 **查询的魔法关键词**
输出描述
- 对于 `"SearchEngine"` 指令,输出 `"null"`。 - 对于 `"addWord"` 和 `"delWord"` 指令,输出该 `book_id` 当前绑定的 **关键词总数**。 - 对于 `"query"` 指令,按 **升序** 输出所有符合条件的 `book_id`,以 **空格** 分隔;若无匹配,输出 `-1`。
示例
示例 1
输入
9 SearchEngine addWord 1 2 fireball lightning addWord 2 2 fireball lightning query 2 fireball lightning delWord 1 1 fireball query 2 fireball lightning query 1 lightning delWord 2 1 fireball query 2 fireball lightning
输出
null 2 2 1 2 1 2 1 2 1 -1
说明:1. **初始化搜索系统** - 初始化 `SearchEngine`,系统创建完成。 - **输出** `"null"`。 2. **向 `1` 号书籍绑定 `"fireball"` 和 `"lightning"`** - `1` 号书籍现在绑定了 `{fireball, lightning}`,共 **2** 个关键词。 - **输出** `2`(当前 `1` 号书籍的关键词总数)。 3. **向 `2` 号书籍绑定 `"fireball"` 和 `"lightning"`** - `2` 号书籍现在绑定 `{fireball, lightning}`,共 **2** 个关键词。 - **输出** `2`。 4. **查询包含 `"fireball"` 和 `"lightning"` 的书籍** - `1` 号书籍 **同时** 绑定了 `"fireball"` 和 `"lightning"`。 - `2` 号书籍 **同时** 绑定了 `"fireball"` 和 `"lightning"`。 - **符合条件的书籍ID按升序输出**: 5. **删除 `1` 号书籍中的 `"fireball"`** - `1` 号书籍现在只剩 `{lightning}`。 - **输出** `1`(`1` 号书籍的关键词总数)。 6. **查询包含 `"fireball"` 和 `"lightning"` 的书籍** - `1` 号书籍 **不再** 绑定 `"fireball"`,只剩 `"lightning"`,所以 **不符合查询**。 - `2` 号书籍 仍然绑定 `{fireball, lightning}`,所以 **符合查询**。 - **输出** `2`。 7. **查询包含 `"lightning"` 的书籍** - `1` 号书籍 **绑定** `{lightning}`,符合条件。 - `2` 号书籍 **绑定** `{fireball, lightning}`,也符合条件。 - **符合条件的书籍ID按升序输出**: 8. **删除 `2` 号书籍中的 `"fireball"`** - `2` 号书籍 现在只剩 `{lightning}`。 - **输出** `1`(`2` 号书籍的关键词总数)。 9. **查询包含 `"fireball"` 和 `"lightning"` 的书籍** - `1` 号书籍 只绑定 `{lightning}`,不符合查询条件。 - `2` 号书籍 只绑定 `{lightning}`,不符合查询条件。 - **无符合条件的书籍,返回 `-1`**:
时间限制 1000 ms · 内存限制 128 MB