OD C卷 - 实现 【手机App防沉迷系统】

题目

  • 在一天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)