1

私はこのhttp://www.spoj.pl/problems/INOUTEST/の問題を解決しようとしていました。

入力:入力の最初の行には、1つの整数N(1≤N≤106)が含まれ、後続の行数を示します。これらの各行には、スペースで区切られた2つの整数aとb(| a |、| b |≤40,000)が含まれています。

出力:aとbのペアごとに、a×bの値を含む1行の出力を書き込みます。私のコードは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のすべての問題を解決し、学ぼうとしているので、これに興味があります。ありがとうございました。

4

1 に答える 1

1

for ループ内でマップを使用しないことで、あなたの時間を 4 秒 (12.52 まで) 短縮することができました。代わりに、考えられる最も簡単な方法で、入力の各行を 2 つの整数に変換しました。

ab = line.split()
a = int(ab[0])
b = int(ab[1])

あなたのソリューションと私が思いついたソリューションの他の唯一の違いは、入力の最初の行 (従うべきテスト ケースの数) を読み取るraw_input()代わりに使用したことです。s.readline()これは一度しか実行されないため、実行時間に測定可能な影響を与えるとは思えません。

于 2012-07-08T13:59:25.100 に答える