题目
- 在一天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:
python
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:
python
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 apps
new_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 = False
for i in range(len(apps)):
if (apps[i][2]<=infos[3] and apps[i][3]>=infos[2] and apps[i][1] >= infos[1]) :
flag = True
if (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)