快手编程题

一年一度的快手运动会又要开始了,同学们终于有一天可以离开鼠标键盘显示器,全身心的投入到各种体育项目中。UED设计师小红虽然没有参加体育项目,但她的责任重大,因为她是拉拉队的队长,她需要在每个项目中为参赛的同学们加油助威。

因为运动会的项目众多,很多项目在同一时间会同时进行着。作为拉拉队长,小红需要遵守以下规则:

不能同时给多个体育项目加油助威

给每个体育项目加油的时长必须超过项目时长的一半,每个体育项目只能加油一次

体育项目的开始和结束时间都是整点,如果项目进行到一半想要离开,也只能选择整点离开

不考虑往返于各个体育项目比赛场地中花费的时间

请帮小红设计一个算法,在已知所有体育项目日程的前提下,计算是否能在每个体育项目中为参赛的同学们加油。

说明:

如果体育项目时长为2,超过时长的一半为2;

如果体育项目时长为3,超过时长的一半为2;

如果体育项目时长为4,超过时长的一半为3;
 def dfs(tlst):
    tlst.sort(key= lambda x:(x[1]),reverse=True)
    print(tlst)
    late_arr=tlst[0][1]
    tlst.pop(0)
    print(tlst)
    if not tlst:
        return 1
    tlst.sort(reverse=True)
    early_lef=tlst[0][0]
    print(late_arr,early_lef)
    print(early_lef>late_arr)
    if early_lef>late_arr:
        print(-1)
        return -1
    else:return dfs(tlst)
 
n=int(input())
times_lst=[]
for i in range(n):
    line=list(map(int,input().split()))
    times_lst.append(line)
print(times_lst)
lrtime=[]
for i in times_lst:
    s=(i[1]-i[0])//2+1
    early_lef=i[0]+s
    late_arr=i[1]-s
    lst=[early_lef,late_arr]
    lrtime.append(lst)
print(lrtime)
jud=dfs(lrtime)
print(jud)