gpt4 book ai didi

python - SPOJ : runtime error (NZEC)

转载 作者:太空宇宙 更新时间:2023-11-04 07:40:18 31 4
gpt4 key购买 nike

我试着做 this problem在 spoj.com,但我不断收到错误运行时错误 (NZEC)。我用 python 编写代码。我不知道为什么。这是我的代码,

import sys

def unique(lines, exact=True):
for L in lines:
if L.count('#') != 1 and exact:
return False
if L.count('#') > 1 and not exact:
return False
return True

def resolve(N, lines):

diags = [
[lines[i][i+j] for i in range(max(0, -j), min(N, N-j))]
for j in range(-N+1, N)]
anti_diags = [
[lines[i][N-1 -(i+j)] for i in range(max(0, -j), min(N, N-j))]
for j in range(-N+1, N)]
if unique(lines) and unique(zip(*lines)) and unique(diags, False) and unique(anti_diags, False):
return "YES"
return "NO"



input_file = sys.stdin
output_file = sys.stdout

T = int(raw_input())
for i in range(1, T + 1):

n = int(raw_input())

lines = []
for _ in range(n):
line = raw_input().strip()
lines.append(list(line))

print resolve(n, lines)

它在本地工作正常,输入如下:

2
3
..#
#..
.#.
4
.#..
...#
#...
..#.

最佳答案

当我运行您的代码时,我得到以下信息:

$ python spoj.py < input
Traceback (most recent call last):
File "spoj.py", line 38, in <module>
print resolve(n, lines)
File "spoj.py", line 15, in resolve
for j in range(-N+1, N)]
IndexError: list index out of range

这就是您收到的运行时错误。但问题其实出在这部分:

for _ in range(n):
line = raw_input().strip()
lines.append(list(line))

print resolve(n, lines)

由于 print 语句是缩进的,您的程序读取一行,追加到行并在读取以下行之前调用 resolve。删除多余的缩进后,它在我的电脑上运行良好。

在风格和逻辑方面,该程序还有很大的改进空间。如果您需要进一步的建议,请告诉我。

编辑:

您在评论中提到此缩进问题是复制粘贴错误。在那种情况下,正如 sp1r 在他的评论中指出的那样,正如问题页面中的评论所暗示的那样,在线法官使用的输入很可能是格式错误的。

在这种情况下,您必须对输入进行更严格的解析,因为它的格式可能与示例输入所建议的不同。也就是说,而不是:

 2
3
..#
#..
.#.
(etc)

你可以有更像的东西:

2 3
..#
#.. .#.
(etc)

这可能会破坏您的代码,因为它假定发布问题的人有足够的能力进行类似于示例的输入。在 SPOJ 中情况并非总是如此,许多输入文件格式错误,您可以找到 other cases,其中格式错误的输入会导致正确的程序失败。

关于python - SPOJ : runtime error (NZEC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23158052/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com