华为OD---手机App防沉迷系统

题目描述
​智能手机方便了我们生活的同时,也侵占了我们不少的时间。

“手机App防沉迷系统”能够让我们每天合理地规划手机App使用时间,在正确的时间做正确的事。

它的大概原理是这样的:

在一天24小时内,可以注册每个App的允许使用时段 image
一个时间段只能使用一个App,举例说明:不能同时在9:00-10:00注册App2和App3 image
App有优先级,数值越高,优先级越高。注册使用时段时,如果高优先级的App时间和低优先级的时段有冲突,则系统会自动注销低优先级的时段,如果App的优先级相同,则后添加的App不能注册。 举例1: (1) 注册App3前 image (2) App3注册时段和App2有冲突 image (3) App3优先级高,系统接受App3的注册,自动注销App2的注册 image 举例2: (1) 注册App4 image (2) App4和App2及App3都有冲突,优先级比App2高,但比App3低,这种场景下App4注册不上,最终的注册效果如下 image
一个App可以在一天内注册多个时段 image
请编程实现,根据输入数据注册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表示空闲时间

备注
用例保证时间都介于 00:00 - 24:00 之间;
用例保证数据格式都是正确的,不用考虑数据输入行数不够、注册信息不完整、字符串非法、优先级超限、时间格式不正确的问题;
用例1
输入
1
App1 1 09:00 10:00
09:30
输出
App1
说明
App1注册在9点到10点间,9点半可用的应用名是App1

用例2
输入
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20
输出
App2
说明
App1和App2的时段有冲突,App2优先级高,注册App2之后,App1自动注销,因此输出App2。

用例3
输入
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:50
输出
NA

def time_covert(time):
    #时间进行一下格式上的转换
    hour,minute=map(int,time.split(":"))
    return hour*60+minute
def isovertime(app1,app2):
    #判断两个时间段是否有重叠
    if app1[2]<=app2[2]<app1[3]:
        return  True
    if app2[2]<=app1[2]<app2[3]:
        return  True
    return False

    pass
def register_app(apps,querytime):
    registers=[]
    for app in apps:
        #注册起始时间不能大于结束时间
        if app[2]>=app[3]:
            continue
        conflict=False#默认不会发生冲突
        for reg_app in registers:
            #因为优先级的问题,所以只要发生冲突,那么必定不能成功
            if isovertime(app,reg_app):
                conflict=True
                break
        if conflict:
            #发送冲突那就着手下一个app的注册问题
            continue
        #没任何问题就加入到注册列表
        registers.append(app)
    result = 'NA'
    for reg_app in registers:
        if reg_app[2]<=querytime<reg_app[3]:
            result=reg_app[0]
            break

    return result
def main():
    N=int(input())
    apps=[]
    #存储我们的app信息并且将时间转换成分钟形式,然后按照优先级进行排序
    #就是说我们想先让优先级高的注册
    for _ in range(N):#
        app=list(map(str,input().split(' ')))
        app[2]=time_covert(app[2])
        app[3]=time_covert(app[3])
        apps.append(app)
    apps=sorted(apps,key=lambda x:(x[1]),reverse=True)#根据优先级排队先
    querytime=time_covert(input())
    Result=register_app(apps,querytime)
    print(Result)
if __name__ == '__main__':
    main()
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值