在小慕的魔法工作室,他需要管理大量蕴含魔法能量的封印卷轴。这些卷轴必须按照严格的规则存放进中,否则能量会失控,造成混乱。 为此,小慕设计了一套,用来高效管理这些卷轴。系统按照以下规则运行: 1. 初始化封印系统:设置封印规则,包括 `timeWindow`、最大封印卷轴数 `maxFiles`、封印卷轴的魔法总量上限 `fileSize`。 2. 创建:每个卷轴按照时间顺序生成(严格递增),并带有唯一的编号 `fileId` 和魔法能量值 `fileSize`。 3. 执行封印:选择满足条件的卷轴,将其打包进魔法典籍中。 你的任务是实现这个魔法封印系统,使卷轴能够按照规则正确封印。
提示:带虚线的词点一下有通俗解释。
输入描述
第一行包含一个整数 `Q`,表示操作的总数。 接下来的 `Q` 行,每行描述一个操作,操作分为以下几种: 1. **初始化封印系统**: - 命令:`ZipSystem` - 参数: - `timeWindow`:时间窗口 `T`,表示卷轴的时间戳与队列中第一个卷轴的时间戳之差不能超过 `T`。 - `maxFiles`:最大封印卷轴数 `M`,表示每次封印操作最多可以封印 `M` 个卷轴。 - `maxSize`:魔法总量上限 `S`,表示每次封印操作的卷轴魔法能量值之和不能超过 `S`。 2. **插入卷轴**: - 命令:`insertFile` - 参数: - `timestamp`:卷轴的时间戳。 - `fileId`:卷轴的唯一编号。 - `fileSize`:卷轴的魔法能量值。 3. **执行封印**: - 命令:`zip` - 参数:无
输出描述
对于每个操作,输出相应的结果: 1. **初始化封印系统**: - 输出:`"null"`,表示初始化完成。 2. **插入卷轴**: - 输出:当前队列中的卷轴数量。 3. **执行封印**: - 输出:封印的卷轴编号列表,按升序排列,编号之间用空格分隔。如果没有满足条件的卷轴,输出空行。
示例
示例 1
输入
12 ZipSystem 10 3 15 insertFile 1 101 5 insertFile 2 102 4 insertFile 3 103 6 insertFile 5 104 3 insertFile 15 105 7 zip insertFile 17 107 4 insertFile 20 94 3 zip insertFile 20 85 1 zip
输出
null 1 2 3 4 5 101 102 103 3 4 104 105 3 85 94 107
说明:在这个示例中,魔法封印系统按照以下步骤运行: 1. **初始化封印系统**:设置时间窗口 `T=10`,最大封印卷轴数 `M=3`,魔法总量上限 `S=15`。系统初始化完成后输出 `"null"`。 2. **插入卷轴**: - 插入卷轴 `(1, 101, 5)`,队列中有 1 个卷轴,输出 `1`。 - 插入卷轴 `(2, 102, 4)`,队列中有 2 个卷轴,输出 `2`。 - 插入卷轴 `(3, 103, 6)`,队列中有 3 个卷轴,输出 `3`。 - 插入卷轴 `(5, 104, 3)`,队列中有 4 个卷轴,输出 `4`。 - 插入卷轴 `(15, 105, 7)`,队列中有 5 个卷轴,输出 `5`。 3. **第一次执行封印**: - 选择满足条件的卷轴 `101`、`102`、`103`,它们的魔法能量值之和为 `5 + 4 + 6 = 15`,未超过 `S=15`,且时间戳差不超过 `T=10`。 - 封印后输出 `101 102 103`,队列中剩余卷轴 `(5, 104, 3)` 和 `(15, 105, 7)`。 4. **继续插入卷轴**: - 插入卷轴 `(17, 107, 4)`,队列中有 3 个卷轴,输出 `3`。 - 插入卷轴 `(20, 94, 3)`,队列中有 4 个卷轴,输出 `4`。 5. **第二次执行封印**: - 选择满足条件的卷轴 `104` 和 `105`,它们的魔法能量值之和为 `3 + 7 = 10`,未超过 `S=15`,且时间戳差不超过 `T=10`。 - 封印后输出 `104 105`,队列中剩余卷轴 `(17, 107, 4)` 和 `(20, 94, 3)`。 6. **继续插入卷轴**: - 插入卷轴 `(20, 85, 1)`,队列中有 3 个卷轴,输出 `3`。 7. **第三次执行封印**: - 选择满足条件的卷轴 `85`、`94`、`107`,它们的魔法能量值之和为 `1 + 3 + 4 = 8`,未超过 `S=15`,且时间戳差不超过 `T=10`。 - 封印后输出 `85 94 107`,队列为空。
时间限制 1000 ms · 内存限制 128 MB