我在试着解决这个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中的所有问题,我正在努力学习。谢谢。
发布于 2012-07-08 21:59:25
通过不在for循环中使用map,我设法将您的时间缩短了4秒(减少到12.52秒)。相反,我只是以我能想到的最直接的方式将每一行输入转换为两个整数。
ab = line.split()
a = int(ab[0])
b = int(ab[1])您的解决方案与我提出的解决方案之间唯一的另一个区别是,我使用raw_input()而不是s.readline()来读取输入的初始行(要跟踪的测试用例的数量)。因为这只执行一次,所以我怀疑它对运行时有可衡量的影响。
https://stackoverflow.com/questions/10815091
复制相似问题