AlgoMooc
← 返回题库

K0089. 晶格管理系统

中等通过率 79% · 提交 14 · 通过 11
模拟贪心哈希表数学

在魔法大陆中,小慕正在设计并实现一座不断扩展的 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

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。