手机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()