小慕正在开发一个智能闹钟管理系统,用来帮助用户高效管理每天的提醒任务。每个闹钟都有一个唯一的编号,并会在每周的特定时间自动触发。 你需要帮小慕实现这个闹钟管理系统,支持以下功能: 1. 初始化系统(MagicAlarmSystem) 初始化整个闹钟管理系统,该操作会清除所有已有的闹钟数据。此操作必须在其他任何操作之前执行一次,格式为:
MagicAlarmSystem2. 添加闹钟(`addAlarm`) 添加一个新的闹钟。每个闹钟包含以下属性: * `id`:唯一的整数编号(1 ≤ id ≤ 1000) * ``:表示闹钟在一周中哪些天会响铃。是一个不超过7个元素的数组,每个元素是 1\~7 的整数,表示周一至周日。 * `hour`:闹钟响起的小时(0 ≤ hour < 24) * `minute`:闹钟响起的分钟(0 ≤ minute < 60) * ``:闹钟类型(0 表示普通,1 表示紧急,2 表示重要) 如果已经存在相同 `id` 的闹钟,则添加失败,返回 `False`;否则成功添加,返回 `True`。 3. 删除闹钟(`deleteAlarm`) 根据闹钟的 `id` 删除对应的闹钟。 如果该闹钟存在,则删除并返回 `True`;否则返回 `False`。 4. 查询闹钟(`queryAlarm`) 查询在指定时间范围内会响铃的所有闹钟。 * 输入参数包括: * `weekday`:星期几(1 - 7) * `hour`:小时(0 ≤ hour < 24) * `startminute`:开始分钟(0 ≤ startminute < 60) * `endminute`:结束分钟(startminute ≤ endminute < 60) 查询条件:筛选出在指定 `weekday` 的 `hour` 点内、`minute` 在 `[startminute, endminute]` 范围内的闹钟。 查询结果排序规则如下: * 先按 `(hour, minute)` ; * 若时间相同,按 `typeId` 升序; * 若 `typeId` 相同,按 `id` 升序。 如果没有符合条件的闹钟,输出 `-1`。
提示:带虚线的词点一下有通俗解释。
输入描述
* 第一行输入一个整数 `Q`(1 ≤ Q ≤ 1000),表示操作次数。 * 接下来 Q 个操作,每个操作格式如下: - `MagicAlarmSystem`:初始化系统。 - `addAlarm(id, weekdays, hour, minute, typeId)`:添加一个闹钟。 - `deleteAlarm(id)`:根据 `id` 删除一个闹钟。 - `queryAlarm(weekday, hour, startminute, endminute)`:查询在某个星期几的某个小时内,指定时间段内响起的所有闹钟。
输出描述
对于 `MagicAlarmSystem` 操作: - 输出`null`。 对于每个查询操作 `queryAlarm`,输出符合条件的闹钟的编号,按照以下顺序排序: 1. 按照闹钟的响起时间(`hour`, `minute`)从早到晚排序。 2. 如果响起时间相同,则按照闹钟的类型 `typeId` 从小到大排序。 3. 如果类型相同,则按照 `id` 从小到大排序。 对于每个 `addAlarm` 和 `deleteAlarm` 操作,输出操作结果: - 如果成功添加或删除闹钟,输出 `True`。 - 如果添加或删除操作失败(如 `id` 已存在或不存在),输出 `False`。 如果查询没有符合条件的闹钟,则输出 `-1`。
示例
示例 1
输入
11 AlarmSystem addAlarm 1 3 1 3 5 7 30 0 addAlarm 2 3 2 4 6 8 15 1 addAlarm 1 3 1 2 3 9 0 2 deleteAlarm 1 deleteAlarm 3 queryAlarm 4 9 5 10 addAlarm 3 2 4 5 9 8 2 addAlarm 4 2 4 5 9 9 1 addAlarm 5 2 4 5 9 6 0 queryAlarm 4 9 5 10
输出
null True True False True False -1 True True True 5 3 4
说明:1. **`AlarmSystem`**: - 首先初始化了闹钟系统。输出 `null`,表示系统已成功初始化。 2. **`addAlarm` (id=1, weekdays=[1, 3, 5], hour=7, minute=30, typeId=0)**: - 尝试添加一个闹钟,`id=1`,设置在星期一、三、五响铃,时间为 7:30,类型为 `0`(普通闹钟)。 - 由于这是第一个闹钟,添加成功,输出 `True`。 3. **`addAlarm` (id=2, weekdays=[2, 4, 6], hour=8, minute=15, typeId=1)**: - 尝试添加另一个闹钟,`id=2`,设置在星期二、四、六响铃,时间为 8:15,类型为 `1`(紧急闹钟)。 - 添加成功,输出 `True`。 4. **`addAlarm` (id=1, weekdays=[1, 2, 3], hour=9, minute=0, typeId=2)**: - 尝试再次添加 `id=1` 的闹钟,但 `id=1` 的闹钟已经存在,因此不能添加,输出 `False`。 5. **`deleteAlarm` (id=1)**: - 删除 `id=1` 的闹钟。删除成功,输出 `True`。 6. **`deleteAlarm` (id=3)**: - 尝试删除一个不存在的闹钟 `id=3`,返回 `False`,表示该闹钟不存在。 7. **`queryAlarm` (weekday=4, hour=9, startminute=5, endminute=10)**: - 查询在星期四,9:00 到 10:00 之间响铃的闹钟。 - 由于当前没有符合条件的闹钟,输出 `-1`。 8. **`addAlarm` (id=3, weekdays=[4, 5], hour=9, minute=8, typeId=2)**: - 添加一个新的闹钟,`id=3`,设置在星期四和星期五响铃,时间为 9:08,类型为 `2`(重要闹钟)。 - 添加成功,输出 `True`。 9. **`addAlarm` (id=4, weekdays=[4, 5], hour=9, minute=9, typeId=1)**: - 添加一个新的闹钟,`id=4`,设置在星期四和星期五响铃,时间为 9:09,类型为 `1`(紧急闹钟)。 - 添加成功,输出 `True`。 10. **`addAlarm` (id=5, weekdays=[4, 5], hour=9, minute=6, typeId=0)**: - 添加一个新的闹钟,`id=5`,设置在星期四和星期五响铃,时间为 9:06,类型为 `0`(普通闹钟)。 - 添加成功,输出 `True`。 11. **`queryAlarm` (weekday=4, hour=9, startminute=5, endminute=10)**: - 查询在星期四,9:00 到 10:00 之间响铃的闹钟。 - 符合条件的闹钟有 `id=5`(9:06)、`id=3`(9:08)和 `id=4`(9:09)。这些闹钟按照时间、类型和 `id` 排序后为 `5 3 4`,因此输出 `5 3 4`。
时间限制 1000 ms · 内存限制 128 MB