我试图解决这个问题http://www.spoj.pl/problems/INOUTEST/问题。
输入: 输入的第一行包含一个整数 N (1 ≤ N ≤ 106),表示后面的行数。每行包含两个空格分隔的整数 a 和 b (|a|, |b| ≤ 40,000)。
输出: 对于每一对 a 和 b,写入包含 a × b 值的单行输出。 我的代码是这样的,运行到 17.03 秒:
import sys
import psyco
psyco.full()
def main():
s = sys.stdin
t = int(s.readline())
for l in s:
n, m = map(int, l.split())
print n*m
if __name__ == '__main__':
main()
然后我就变了
t = int(s.readline())
至
t = s.readline()
运行到 16.62 秒。这让我意识到,将字符串转换为整数的次数越少,代码运行的速度就越快。最快的解决方案大约是 2.5 秒。我对此很好奇,因为我用 python 解决了 SPOJ 中的所有问题,并且我正在尝试学习。谢谢。
最佳答案
通过在 for 循环中不使用映射,我成功地将您的时间减少了 4 秒(减少到 12.52 秒)。相反,我只是以我能想到的最直接的方式将每一行输入转换为两个整数。
ab = line.split()
a = int(ab[0])
b = int(ab[1])
您的解决方案与我提出的解决方案之间的唯一区别是我使用 raw_input()
而不是 s.readline()
来读取第一行输入的数量(要遵循的测试用例的数量)。由于这只执行一次,我怀疑它会对运行时间产生可衡量的影响。
关于Python - 处理来自 STDIN 的输入而不转换为整数(SPOJ INOUTEST),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10815091/