手机App防沉迷系统
题目描述
智能手机方便了我们生活的同时, 也侵占了我们不少的时间. 手机App防沉迷系统能够让我们每天合理地规划手机App使用时间, 在正确的时间做正确的事.
它的大概原理是这样的:
- 在一天24小时内, 可以注册每个App的允许使用时段
- 一个时间段只能使用一个App
- App有优先级, 数值越高, 优先级越高. 注册使用时段时, 如果高优先级的App时间和低优先级的时段有冲突, 则系统会自动注销低优先级的时段, 如果App的优先级相同, 则后添加的App不能注册
请编程实现, 根据输入数据注册App, 并根据输入的时间点, 返回时间点使用的App名称, 如果该时间点没有注册任何App, 请返回字符串
NA
.
输入描述
- 第一行表示注册的App数量 N(N ≤ 100)
- 第二部分包括 N 行, 每行表示一条App注册数据
- 最后一行输入一个时间点, 程序即返回该时间点使用的App
2
App1 1 09:00 10:00
App2 2 11:00 11:30
09:30
数据说明如下:
- N行注册数据以空格分隔, 四项数依次表示: App名称、优先级、起始时间、结束时间
- 优先级1~5, 数字越大, 优先级越高
- 时间格式 HH:MM, 小时和分钟都是两位, 不足两位前面补0
- 起始时间需小于结束时间, 否则注册不上
- 注册信息中的时间段包含起始时间点, 不包含结束时间点
输出描述
输出一个字符串, 表示App名称, 或NA表示空闲时间.
示例1
输入:
1
App1 1 09:00 10:00
09:30
输出:
App1
示例2
输入:
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20
输出:
App2
示例3
输入:
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:50
输出:
NA
题解
Python
def main():
# 先读取输入
# 然后构造列表, 将每个app都注册进去
# 最后查找给定时间点内的app
num_apps = int(input())
input_apps = []
for i in range(num_apps):
parts = input().split()
assert len(parts) == 4
# 将时间点转换成整数
start_time = int(parts[2].replace(":", ""))
end_time = int(parts[3].replace(":", ""))
app = (parts[0], int(parts[1]), start_time, end_time)
input_apps.append(app)
# 读取查询的时间点
searched_time = int(input().replace(":", ""))
NAME = 0
PRIORITY = 1
START_TIME = 2
END_TIME = 3
# 注册app
validated_apps = []
for app in input_apps:
skip_app = False
for i in range(len(validated_apps)):
valid_app = validated_apps[i]
# 检查时间段是否有冲突
if valid_app[START_TIME] >= app[END_TIME] or valid_app[END_TIME] <= app[START_TIME]:
continue
# 检查优先级, 如果待注册的app优先级不高于已注册的app, 就不注册它
if valid_app[PRIORITY] >= app[PRIORITY]:
skip_app = True
else:
# 将已注册的app清除, 因为它优先级更低
validated_apps.pop(i)
break
if not skip_app:
validated_apps.append(app)
for app in validated_apps:
# 查询的时间点在该 app 的服务时间段内
if app[START_TIME] <= searched_time < app[END_TIME]:
print(app[0])
return
print("NA")
if __name__ == "__main__":
main()