如何修复CodeJam 2019-Round1C -Q1答案

时间:2019-05-04 13:46:32

标签: python

我在CodeJam期间使用Python3提交了以下解决方案。 但是,它返回WrongAnswer错误。

阅读官方分析后,我发现这个想法确实匹配。 我想知道我错过了哪个测试用例/场景!

链接到Google CodeJam:https://codingcompetitions.withgoogle.com/codejam/round/00000000000516b9

def result(k, x):
    print("Case #{}: {}".format(k, x))


def select_move(r_set):
    if "P" in r_set and "S" in r_set:
        return "S"
    if "S" in r_set and "R" in r_set:
        return "R"
    if "R" in r_set and "P" in r_set:
        return "P"
    if "P" in r_set:
        return "S"
    if "S" in r_set:
        return "R"
    if "R" in r_set:
        return "P"


def __main__():
    t = int(input())
    for k in range(1, t + 1):
        a = int(input())
        opponents = [input().strip() for s in range(0, a)]

        move = list()
        broke = False
        max_len = 500

        for i in range(0, max_len):
            if broke:
                break
            r_set = set(map(lambda x: x[i % len(x)], opponents))
            if len(r_set) == 3:
                broke = True
                break
            elif len(r_set) == 1:
                # win
                move.append(select_move(r_set))
                break
            else:
                if i == max_len - 1:
                    broke = True
                    break
                move.append(select_move(r_set))

        if broke:
            result(k, "IMPOSSIBLE")
        else:
            result(k, "".join(move))


__main__()

非常感谢!

1 个答案:

答案 0 :(得分:0)

您的程序找不到以下输入的解决方案:

1
2
P
R

我认为在您的代码中,您假设您可以通过对第i个字母做出正确的决定来赢得比赛。
但是例如在这种情况下,需要做的事情(至少这是我解决的方式,也许还有其他方法)是您必须选择P作为您的第一个字母(您已经这样做了) ),那么您将淘汰一些团队(此处R被淘汰)。现在您可以再次解决问题,但是这次您仅尝试在第一次迭代后击败其余的团队。

1
1
P

您连接解决方​​案并获得PS .........