我对竞技编程设置中的输入处理相当熟悉,但我无法在 Python 中处理这个问题(https://www.spoj.com/problems/MINDIST/)(我的解决方案在 C++ 中有效,因此问题本身没有问题)。在 SPOJ 平台中读取输入的标准方法是什么?
这里,这就是将输入到标准输入的内容:
输入的第一行包含一个整数 T,表示测试用例的数量。后面跟着 T 个块。
对于每个测试用例,第一行包含两个用空格分隔的整数 N (1<=N<=100000) 和 S (0<=S<=100000000)。接下来的 N-1 行,每行包含三个整数 X (1<=X<=N)、Y (1<=Y<=N) 和 Z (1<=Z<=1000),表示节点 X 和 Y 之间存在一条 (无向) 加权边 Z。输入是正确的。
联邦输入的一个例子是:
2
5 2
1 2 5
2 3 2
2 4 4
2 5 3
8 6
1 3 2
2 3 2
3 4 6
4 5 3
4 6 4
4 7 2
7 8 3
口粮:
这(仅输入处理)会出现“运行时错误,非零退出代码”(但在本地和在线编译器(如 ideone)上可以工作):
def get_int():
return int(input())
def get_ints():
return map(int, input().split())
T = get_int()
for _ in range(T):
N, S = get_ints()
for _ in range(N-1):
X, Y, Z = get_ints()
看来这个get_ints()
调用是个问题,因为:
def get_int():
return int(input())
def get_ints():
return map(int, input().split())
T = get_int()
for _ in range(T):
N, S = 2, 3
for _ in range(N-1):
X, Y, Z = 1, 2, 3
得到(正如预期)“错误答案”。
我不知道为什么会发生这种情况。
输入数据实际上包含空行。如果我通过在顶部添加以下内容来过滤掉它们,判决结果将从“错误”变为“错误答案”:
我认为他们的输入无效,而您的输入处理正确。空行不应该存在,或者他们的输入描述应该提到它们。按照写法,它们不行。
我通过多次提交各种测试解决了这个问题,例如将结果存储
split()
在临时变量中并执行while len(temp) != 2: pass
。这给了我“超出时间限制”的信息,所以我知道行上的元素数量是错误的。