#5348. 座位预约系统
座位预约系统
题目描述
某电影院有一个座位预约系统,共有 个座位,编号为 到 。初始时所有座位都是空闲的。
系统支持以下三种操作:
- 预约座位:
book X- 尝试预约座位 。如果该座位空闲则预约成功;如果已被预约则失败。 - 取消预约:
cancel X- 取消座位 的预约。如果该座位已被预约则取消成功;如果本来就空闲则操作无效。 - 查询可用座位数量:
available- 查询当前所有可用(空闲)的座位数量。
你需要编写一个程序,处理一系列操作,并按要求输出结果。
输入格式
第一行一个整数 ,表示操作的总数。
接下来 行,每行描述一个操作:
- 预约座位:
book X,其中 为座位号。 - 取消预约:
cancel X,其中 为座位号。 - 查询可用座位数量:
available。
输出格式
对于每个操作,按以下要求输出:
-
对于
book X操作:- 如果预约成功,输出
Seat X booked. - 如果预约失败(座位已被预约),输出
Seat X already taken.
- 如果预约成功,输出
-
对于
cancel X操作:- 无论该座位之前是否已被预约,都输出
Seat X canceled.
- 无论该座位之前是否已被预约,都输出
-
对于
available操作:- 输出一行:
Available seats: k,其中 是当前可用座位的数量。
- 输出一行:
每个输出占一行。
样例
8
book 5
book 1000000000
book 5
available
cancel 5
book 5
available
book 999999999
Seat 5 booked.
Seat 1000000000 booked.
Seat 5 already taken.
Available seats: 999999998
Seat 5 canceled.
Seat 5 booked.
Available seats: 999999998
Seat 999999999 booked.
6
available
book 1
book 2
available
cancel 1
available
Available seats: 1000000000
Seat 1 booked.
Seat 2 booked.
Available seats: 999999998
Seat 1 canceled.
Available seats: 999999999
样例解释
- 初始时,可用座位总数为 。
- 样例 #1 中,依次进行了预约、查询、取消等操作,具体过程如输出所示。
- 当座位 被取消后,重新变为空闲,因此可用座位数恢复。
数据范围与提示
- 注意 的取值范围较大,不能直接使用数组保存所有座位的状态,需使用高效的查找结构(如哈希表)存储已被预约的座位。