-1

我在 CodeJam 期间在 Python3 中提交了以下解决方案。然而,它返回 WrongAnswer 错误。

看了官方的分析,发现思路确实符合。我想知道我错过了哪个测试用例/场景!

链接到 Google CodeJam:https ://codingcompetitions.withgoogle.com/codejam/r​​ound/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__()

非常感谢!!!

4

1 回答 1

0

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

1
2
P
R

我假设在您的代码中,您假设您可以通过在每个人的第 i 个字母上做出正确的决定来赢得比赛。
但是例如在这种特定情况下需要做的事情(至少这是我解决它的方法,可能还有其他方法)是您必须选择 P 作为您的第一个字母(您已经这样做了),而不是消除一些团队(这里 R 被淘汰)。现在您再次解决问题,但这次您只尝试在第一次迭代后击败剩余的团队。

1
1
P

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

于 2019-05-04T14:04:38.797 回答