在魔法大陆中,小慕正在设计并实现一座不断扩展的 Magic Tower。 魔法塔由若干层(Layer)组成,每一层塔层被划分为固定数量的单元(Cell),用于存放魔法能量。 系统最初只有一层基础塔层(编号为 `0`)。 当空间不足时,魔法塔会自动生成新的扩展塔层,编号从 `1` 开始依次递增。 当能量被释放后,系统会在满足条件时自动回收完全空闲的扩展塔层。 小慕需要根据给定的一系列操作,实现该系统。 --- 操作说明 1. 初始化系统
提示:带虚线的词点一下有通俗解释。
输入描述
- 第一行输入整数 `Q`,表示操作总数 - 接下来 `Q` 个操作 - 第 1 个操作一定为 `MagicTower` - 每个参数单独一行 - 操作总数 `Q <= 1000` - `4 <= cellCount <= 16` - `capacity` 为 `4 * 1024` 的倍数,且 `capacity <= 2 * 1024 * 1024` - `capacity / cellCount` 为 `4` 的倍数 - `volume <= capacity` - 塔层总数最多为 32(编号范围 `0 <= layerId < 32`)
输出描述
- 初始化输出一行:`null` - `allocate` 输出一行两个整数:`layerId startCellId` - `release` 输出一行:`True` 或 `False` - `query` 输出若干行:每行 `layerId freeCellCount`
示例
示例 1
输入
6 MagicTower 4096 4 allocate 1023 allocate 1025 release 0 0 allocate 2048 query
输出
null 0 0 0 1 True 1 0 0 2 1 2
说明:MagicTower 4096 4 初始化魔法塔,创建 1 个塔层(编号 0),每层包含 4 个晶格,每个晶格容量为 1024。 allocate 1023 申请 1023 单位能量,仅需 1 个晶格,在塔层 0 的第 0 号晶格处分配。 allocate 1025 申请 1025 单位能量,需要 2 个连续晶格,在塔层 0 的第 1、2 号晶格处分配。 release 0 0 释放塔层 0 中起始晶格为 0 的那次分配,释放成功。 allocate 2048 申请 2048 单位能量,需要 2 个连续晶格,由于塔层 0 的空闲晶格不连续,系统新增塔层 1 并在其第 0 号晶格处分配。 query 查询当前塔层状态,结果显示塔层 0 和塔层 1 各有 2 个空闲晶格。
时间限制 1000 ms · 内存限制 128 MB