我在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__()
非常感谢!
答案 0 :(得分:0)
您的程序找不到以下输入的解决方案:
1
2
P
R
我认为在您的代码中,您假设您可以通过对第i个字母做出正确的决定来赢得比赛。
但是例如在这种情况下,需要做的事情(至少这是我解决的方式,也许还有其他方法)是您必须选择P作为您的第一个字母(您已经这样做了) ),那么您将淘汰一些团队(此处R被淘汰)。现在您可以再次解决问题,但是这次您仅尝试在第一次迭代后击败其余的团队。
1
1
P
您连接解决方案并获得PS .........