Python - 处理来自 STDIN 的输入而不转换为整数(SPOJ INOUTEST)

标签 python string io integer

我试图解决这个问题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/

相关文章:

python - 在python中将不带文件路径的文件名添加到csv

Python拆分 ':'字符前的单词但不拆分时间结构

java - 使用 Java 打开 Microsoft Word docx 文件

linux - I/O 内存访问可以在 Linux (ARM) 下的 ISR 中使用吗?

python - Numpy:随机数生成 - 将循环分成 block

python - 如何在 python 中创建一个给定 n 行和 k 列、起始数 x 和步长 y 的数组

python - Pandas 与 MultiIndex 合并用于重复列

c - 将字符串拆分为单词

javascript - 将 Javascript 代码放入字符串中?

java - 需要关于适当的类设计的建议