#B4370. [语言月赛 202507] 讨论间预约

[语言月赛 202507] 讨论间预约

题目描述

N 大学图书馆中的讨论间采用预约制,你需要实现一个预约系统。

预约规则如下:

  • 每人每次只能预约 11 间讨论间,每次预约时长不得超过 22 小时。
  • 任何一间讨论间同时只能被 11 人预约。
  • 任何人的预约时间段不能和自己的其它有效预约的时间段重合。

若某次预约的预约时长超过 22 小时,或和预约人自己已有的、未被取消的预约重合,则预约人将被记录一次违规。

  • 若某人被记录 22 次违规,则取消该人之前的所有预约。
  • 若某人被记录 33 次违规,则取消该人之前的所有预约,且该人之后的预约都将被拒绝。

预约按如下格式给出:

reserve <StudentID> <RoomID> <StartTime> <Duration>
  • <StudentID> 是一个整数,保证其在 [100,999][100,999] 之间,表示预约者的学号。
  • <RoomID> 是一个整数,保证其在 [100,999][100,999] 之间,表示预约的讨论间编号。
  • <StartTime> 是一个字符串,以 HH:MM 给出,表示开始时间为 HHMM 分,位数不够时前补零。保证这是一个合法时间。
  • <Duration> 是一个整数,保证其在 [1,999][1,999] 之间,表示预约的使用时长,以分钟计。

在收到预约后,你需要判断预约是否符合上述条件,如果不符合条件,则输出 FAIL,否则输出 SUCCESS <x>,其中 <x> 表示预约编号,该值等于在本次预约之前的曾经成功过的预约数(成功后取消的也计入)。

取消预约按如下格式给出:

cancel <x>
  • 其中 <x> 表示预约编号。意为取消预约编号为 <x> 的预约。

在收到取消预约请求后,如果该预约已经被取消过,则输出 FAIL,否则输出 SUCCESS

输入格式

第一行输入一个整数 nn 表示操作个数。

接下来 nn 行,每行输入一个操作,操作的输入格式如题目描述中所述。

输出格式

对于每个操作,输出一行表示结果。结果的输出格式如题目描述中所述。

7
reserve 201 101 07:00 120
reserve 201 102 08:00 120
reserve 202 101 08:00 120
reserve 202 102 09:00 120
reserve 201 102 09:00 60
cancel 2
reserve 201 102 09:00 60
SUCCESS 1
FAIL
FAIL
SUCCESS 2
FAIL
SUCCESS
SUCCESS 3
4
reserve 201 101 09:00 180
reserve 201 101 09:00 120
reserve 201 102 10:00 120
reserve 202 101 09:00 120
FAIL
SUCCESS 1
FAIL
SUCCESS 2
15
reserve 111 222 00:00 120
reserve 111 333 01:00 1
reserve 111 444 02:00 120
reserve 111 555 01:59 1
cancel 1
reserve 222 444 03:00 60
reserve 111 222 00:00 120
cancel 4
reserve 111 444 03:00 120
reserve 111 456 23:59 120
reserve 111 123 23:00 60
reserve 222 456 23:59 120
reserve 111 101 10:00 120
cancel 5
cancel 6
SUCCESS 1
FAIL
SUCCESS 2
FAIL
FAIL
SUCCESS 3
SUCCESS 4
SUCCESS
FAIL
SUCCESS 5
FAIL
SUCCESS 6
FAIL
FAIL
SUCCESS

提示

样例 1 解释

  • 22 次操作中,学生 201201 的预约和自己在第 11 次预约的时段重合,因此预约失败,并记录一次违规。
  • 33 次操作中,由于学生 201201 已经预定在 07:0009:0007:00\sim 09:00 使用讨论间 101101,存在时间重合,因此预约失败。由于学生 202202 不是和自己的预约冲突,因此不会被记录违规。
  • 55 次操作中,由于学生 202202 已经预定在 09:0011:0009:00\sim 11:00 使用讨论间 102102,存在时间重合,因此预约失败。本次操作同样不会被记录违规。
  • 77 次操作中,由于预约 22(第 66 次操作)已被撤销,因此可以顺利预约。请注意虽然本次预约的开始时间(09:0009:00)和预约 11(第 11 次操作)的结束时间在同一时刻,但不认为这两次预约之间存在重合。

样例 2 解释

由于学生 201201 在第 1,31,3 两次操作中违规,因此第 22 次操作中成功的预约被自动撤销。

数据范围与约定

对于全部数据,满足 1n1051\le n\le 10^5。各测试点的详细数据范围见下表。

测试点 nn 特殊性质
131\sim 3 500\le 500 AC
454\sim 5
686\sim 8 2000\le 2000 A
9119\sim 11 B
121312\sim 13 C
141714\sim 17
181918\sim 19 105\le 10^5 C
202520\sim 25

特殊性质 A:每个人最多进行 2 次预约。

特殊性质 B:每个人最多进行 3 次预约。

特殊性质 C:没有取消操作。