Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Google Codejam 2020资格赛:问题3 这是谷歌2020年Codejam资格赛的第三个问题_Python - Fatal编程技术网

Python Google Codejam 2020资格赛:问题3 这是谷歌2020年Codejam资格赛的第三个问题

Python Google Codejam 2020资格赛:问题3 这是谷歌2020年Codejam资格赛的第三个问题,python,Python,评判系统说这个解决方案给出了一个错误的答案,但我不明白为什么。任何见解都将不胜感激 num_test_cases = int(input()) def notOverlap(activity, arr): # returns true if we have no overlapping activity in arr for act in arr: if not (act[0] >= activity[1] or act[1] <= activit

评判系统说这个解决方案给出了一个错误的答案,但我不明白为什么。任何见解都将不胜感激

num_test_cases = int(input())


def notOverlap(activity, arr):
    # returns true if we have no overlapping activity in arr
    for act in arr:
        if not (act[0] >= activity[1] or act[1] <= activity[0]):
            return False
    return True


def decide(act, num_act):
    C, J = [], []
    result = [None]*num_act
    for i in range(num_act):
        if notOverlap(act[i], C):
            C.append(act[i])
            result[i] = "C"
        elif notOverlap(act[i], J):
            J.append(act[i])
            result[i] = "J"
        else:
            return "IMPOSSIBLE"
    return "".join(result)


for i in range(num_test_cases):
    num_act = int(input())
    act = []
    for _ in range(num_act):
        act.append(list(map(int, input().split())))
    print("Case #" + str(i+1) + ": " + decide(act, num_act))

num\u test\u cases=int(input())
def不重叠(活动,arr):
#如果arr中没有重叠活动,则返回true
对于arr中的act:

如果不是(act[0]>=activity[1]或act[1]您实现了一种蛮力方法来解决它。您的代码运行缓慢,时间复杂度为O(N^2),但您可以在O(N*log(N))中完成

与其用
notOverlap(activity,arr)
检查,不如用对数组进行排序用C或J的最后一个结束时间activity检查(贪婪的解决方法)

在对数组进行排序之前,必须存储活动索引

这是我的解决方案,但在阅读解决方案之前,请尝试自己实现它

范围(1,1+int(input())内的testcasei的
:
n=int(输入())
acts=[]
对于范围(n)中的索引:
开始,结束=映射(int,input().split())
附加((开始、结束、索引))#还存储索引
acts.sort(reverse=True)#按开始时间反向排序
#所以第一个活动转到最后一个
d=['']*n#为答案构造数组
cnow=jnow=0#下次C或J可用时
不可能=不可能#目前并非不可能
while acts:#当有活动时
开始时间,结束时间,索引=acts.pop()
如果cnow