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