为什么我对CodeJam 2020 Qualification Round问题3的解决方案不起作用?

时间:2020-04-07 02:04:44

标签: python-3.x algorithm

我想了解为什么我的Google CodeJam 2020 Qualifier问题3的解决方案不起作用的帮助。

问题链接:https://codingcompetitions.withgoogle.com/codejam/round/000000000019fd27/000000000020bdf9

我的解决方案:

高级概述:

  • 接受输入
  • 通过按照开始时间排序确定给定的输入是否不可能,然后检查一次是否有两个以上的后续活动处于“活动”状态(这是不可能的)
  • 如果是,则进行相应输出;如果不是,请执行以下步骤
  • 任意分配第一人称:在我的解决方案中,我选择了Cameron(C)。
  • 接下来,由于我们知道存在一个解决方案,并且我迭代通过的数组会根据开始时间进行排序,如果下一个活动间隔(按时间顺序)与当前时间间隔重叠,则将其分配给目前不忙。纯粹是因为存在一个解决方案,并且显然不能是当前人,所以必须是另一个人。
  • 此外,如果接下来的活动间隔(按时间顺序)不与当前活动重叠,则将其分配给当前正在忙碌的人(因为他将不忙于下一个活动)
  • 此外,直接从问题的官方分析中引述到:“如果有可能进行赋值,那么就不可能有任何三个成对重叠的活动集,因此,与前面的论点相反,我们将能够赋给在每一步中至少让Jamie或Cameron之一活跃起来。”

此刻,我相信这些参数足以表明我的逻辑是有效的,尽管我的代码显然并不总是能产生正确的答案。我将不胜感激,因为我花了数小时尝试调试,取消推理或找到我的代码的反例,但无济于事,我将不胜感激。我在下面包含了我的代码,以供参考。

代码:


for p in range(int(input())):

    s = int(input())
    l = []
    for i in range(s):
        l.append(list(map(int, list(input().split()))))
    unsort = l.copy()
    l = sorted(l, key=lambda tup: (tup[0],tup[1]))
    enumerated = list(enumerate(unsort))
    enumerated.sort(key=lambda x: x[1][0])
    impossible = False
    endings = sorted([(x[1], False) for x in unsort])
    startings = sorted([(x[0], True) for x in unsort])
    total = sorted(endings + startings, key=lambda tup: (tup[0], tup[1]))

    size = 0

    for i in total:
        if i[1] == True:
            size += 1
        else:
            size -= 1
        if size > 2:
            impossible = True




    def overlap(a,b):
        if not max(a[0], b[0]) >= min(a[1], b[1]):
            return True
        else:
            return False

    ans = "C"

    def opp(a):
        if a == "C":
            return "J"
        else:
            return "C"


    if impossible == True:
       print("Case #" + str(p+1) + ": " + "IMPOSSIBLE")

    else:
        for i in range(0, s-1):
            if overlap(l[i], l[i+1]) == True:
                ans = ans + opp(ans[len(ans)-1])

            else:
                ans = ans + opp(opp(ans[len(ans)-1]))

        #the stuff below is to order the activity assignments according to input order 
        key_value = [(ans[i], l[i]) for i in range(s)]

        fans = ""
        for i in range(s):
            for j in range(s):
                if enumerated[j][0] == i:
                    fans = fans + key_value[j][0]



        print("Case #" + str(p + 1) + ": " + fans)

0 个答案:

没有答案