Code Jam 问题:家长合作返回 - 尽管尝试了许多不同类型的测试用例,但似乎无法弄清楚出了什么问题



目前正在尝试通过这些练习来学习和提高Python;我试图解决的问题是调度任务,更具体地说是Google Code Jam 2020的Parent Partnering Return任务。

我的代码通过了示例测试用例,但在提交时输出了错误的答案。我试图提出许多不同类型的测试用例来找到代码中的裂缝,但没有一个让我找到固有的问题。

我的方法是通过增加开始时间来对任务列表进行排序,然后将它们分配给杰米或卡梅隆。如果其中一个人的现有活动在要分配的开始时间之前结束,则将为另一个人分配手头的活动。如果两者都这样做,那么一个有效的时间表是不可能的。

从 Code Jam 站点获取的示例屏幕截图(我的代码通过了这些测试用例(

以下是我的代码,任何查找问题或失败的测试用例的帮助将不胜感激:

if __name__ == "__main__":
T = input()
for a in range(int(T)):
N = input()
orderedSchedule = []
output = ""
tasks = []
JamieEndtime = -1
CameronEndtime = -1
for b in range(int(N)):
line = input() # string input
singleTask = []
temp = line.split(" ") # separate numbers
singleTask.append(temp)
singleTask = singleTask[0]
tasks.append(singleTask)
for x in range(len(tasks)): # convert into integers
for y in range(len(tasks[0])):
tasks[x][y] = int(tasks[x][y])
unsortedTasks = tasks.copy()
tasks.sort()
for i in range(len(tasks)):
if tasks[i][0] < CameronEndtime:
orderedSchedule.append("J")
if tasks[i][0] < JamieEndtime:
output = "IMPOSSIBLE"
break
else:
JamieEndtime = tasks[i][1]
elif tasks[i][0] < JamieEndtime:
orderedSchedule.append("C")
if tasks[i][0] < CameronEndtime:
output = "IMPOSSIBLE"
break
else:
CameronEndtime = tasks[i][1]
elif tasks[i][0] >= JamieEndtime and tasks[i][0] >= CameronEndtime: # if no conflict at all
orderedSchedule.append("C") # assigned to Cameron by default
CameronEndtime = tasks[i][1]
if output == "IMPOSSIBLE":
break
for j in range(len(tasks)): # output schedule in order of initial input
if output == "IMPOSSIBLE":
break
index = tasks.index(unsortedTasks[j])
output += orderedSchedule[index]
print("Case #" + str(a+1) + ": " + output)

我能够打破它。 测试用例:

1
2
1 2
1 2
Case #1: CC

它成功地完成了赋值,但在撰写输出字符串时失败了。 如果有两个任务具有相同的开始时间和结束时间,则用于检索分配的代码将失败。 (对索引函数的调用始终返回第一个匹配项的位置。 问题陈述并不能保证所有任务的时间都是唯一的。

可能还有其他缺陷,但这至少是一个。

相关内容

最新更新