小慕正在开发一个魔法容器管理系统,用于管理多个容器中的端口资源。每个容器都有一组独立的端口,而不同的业务需要占用其中连续的一段端口来完成运行。 你需要实现一套容器管理契约系统,支持初始化容器、绑定业务、删除业务、查询业务和释放容器等操作。 操作说明 容器与端口限制 * 最多存在 `64` 个容器,每个容器编号 `cid` 范围为 `[0, 1023]` * 每个容器拥有 `30` 个端口,编号为 `[1, 30]` * 每个业务编号 `bid` 范围为 `[1024, 65535]`,每个容器最多绑定若干业务 * 每个业务通过指定 占用连续若干端口,合法策略包括:`1`, `3`, `15`, `30` 添加策略说明 * 若 `level=30`,则 `startport` 只能为 `1` * 若 `level=15`,则 `startport` 只能为 `1` 或 `15` * 若 `level=3`,则 `startport` 只能为 `1, 4, 7, ..., 28` * 若 `level=1` 且 `startport=0`,系统会从 `1` 开始查找空闲端口绑定
提示:带虚线的词点一下有通俗解释。
输入描述
- 第一行输入一个整数 m,表示容业务 ID - 输入一行:若干个业务 ID(以空格分隔) - 输出:成功删除的业务数量第一行输入整数 `Q`,表示操作的总次数。 接下来的 `Q` 行依次表示每条命令及其参数: `MagicContainerSystem` 用于初始化系统。 * 下一行输入一个整数 `n`,表示容器数量 * 接着一行输入 `n` 个整数表示容器 ID 列表 * 输出:`null` `add` 添加一个魔法业务 * 输入:`cid`、`bid`、`startport`、`level`(共四行) * 输出:实际起始端口编号(从 `1` 开始),若失败输出 `-1` `remove` 删除若干业务 - 第一行输入一个整数 m,表示容业务 ID - 输入一行:若干个业务 ID(以空格分隔) - 输出:成功删除的业务数量 `query` 查询某容器下的业务 * 输入一行:容器 ID * 输出一行:所有业务 ID,按以下顺序排序 * 先按 `level` 降序,再按 `startport` 升序,最后按 `bid` 升序 * 若该容器没有业务,输出一行 `-1` `free` 释放某容器的所有业务 * 输入一行:容器 ID * 输出:被释放的业务数量
输出描述
对每条命令按顺序输出结果: * `MagicContainerSystem` 输出一行:`null` * `add` 输出:绑定业务的实际起始端口编号(从 `1` 起);失败输出 `-1` * `remove` 输出:成功删除的业务数量 * `query` 输出:一行所有业务 ID;若无业务,输出 `-1` * `free` 输出:被释放的业务数量
示例
示例 1
输入
12 MagicContainerSystem 3 0 1 2 add 0 5001 1 15 add 0 5002 4 3 add 0 5003 0 1 add 0 5004 0 1 add 1 6000 0 15 query 0 remove 3 5002 5003 9999 query 0 free 0 add 0 7000 0 15 query 0
输出
null 1 -1 16 17 1 5001 5003 5004 1 5001 5004 2 1 7000
说明:* `MagicContainerSystem 0 1 2` → 初始化容器 0、1、2,输出 `null` * `add 0 5001 1 15` → 容器 0 添加业务 5001,从端口 1 开始占用 15 个端口,成功,输出起始下标 `1` * `add 0 5002 4 3` → 端口冲突(已被 5001 占用),添加失败,输出 `-1` * `add 0 5003 0 1`→ 自动分配空闲端口,找到第一个空闲端口 16,成功绑定,输出 `16` * `add 0 5004 0 1`→ 自动分配空闲端口,绑定到端口 17,输出 `17` * `add 1 6000 0 15`→ 向容器 1 添加业务 6000,占用端口 1-15,成功,输出 `1` * `query 0`→ 查询容器 0 的业务,按起始端口排序,输出:`5001, 5003, 5004` * `remove 5002 5003 9999`→ 删除业务 5003 成功,其余忽略,输出成功删除数 `1` * `query 0`→ 查询容器 0 的业务,输出:`5001, 5004` * `free 0`→ 清空容器 0 的所有业务,释放业务数 `2`,输出 `2` * `add 0 7000 0 15` → 自动分配端口,容器 0 为空,从端口 1 开始绑定 7000,输出 `1` * `query 0` → 查询容器 0,仅剩业务 7000,输出:`7000`
时间限制 1000 ms · 内存限制 128 MB