题目
- 在一天24h内,可以注册每个手机App的允许使用时段,一个时间段只能使用一个App;
- App有优先级,值越高,优先级越高,若高优先级的App时段与低优先级的App时段有冲突,则系统自动注销低优先级的时段,若App优先级相同,则后添加的App不能注册;
- 请编程实现,根据输入注册App,并根据输入的时间点,返回时间点使用的App名称,如果该时间点没有注册任何App,则返回“NA”。
输入描述:
第一行输入注册App数量N (N<100);
后N行表示App注册数据,分别为名称、优先级、时间段;
最后一行输入一个时间点,返回该时间点使用的App名称
输出描述:
输出一个字符串,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
解题代码
方案1:
n = int(input().strip())app_list =[]
for i in range(n):name, pri, start, end = input().strip().split()app_list.append((name, pri, start, end))time_point = input().strip()if not app_list:print("NA")
# 起始时间排序
app_list.sort(key=lambda e:e[2])
result = [app_list[0]]
for idx in range(1, len(app_list)):if app_list[idx][2] >= result[-1][-1]:result.append(app_list[idx])else:# 有重叠,比较优先级if app_list[idx][1] > result[-1][1]:result.pop()result.append(app_list[idx])# 输出
flag = "NA"
for item in result:if time_point >= item[2] and time_point <= item[3]:flag = item[0]
print(flag)
方案2:
apps = []
def transfer(input_str):nums = [int(x) for x in input_str.split(":")]total = 60*nums[0] + nums[1]return str(total)def solve(infos) :global appsnew_apps = []for app in apps:if (not (app[2]<=infos[3] and app[3]>=infos[2] and app[1] < infos[1])) :new_apps.append(app);apps = new_apps;flag = Falsefor i in range(len(apps)):if (apps[i][2]<=infos[3] and apps[i][3]>=infos[2] and apps[i][1] >= infos[1]) :flag = Trueif (not flag) :apps.append(infos)n = int(input())
for i in range(n):infos = input().split(" ")infos[2] = transfer(infos[2])infos[3] = transfer(infos[3])solve(infos)target = transfer(input())
output_str = "NA"
for i in range(len(apps)):if (target>=apps[i][2] and target<=apps[i][3]) :output_str = apps[i][0]break
print(output_str)