5

私はこの問題をCodeChefでコーディングし、Python3ソリューションとして提出しました。

import sys

n,k = map(int,sys.stdin.readline().split(" "))
nos = map(int,sys.stdin.readlines())
ans = 0
for i in nos:
    if i>0 and i%k == 0:
        ans += 1
print(ans) 

しかし、私が次のようにコードを書くと、恐ろしいことに、制限時間を超えてしまいます。

import sys

n,k = map(int,sys.stdin.readline().split(" "))
nos = map(int,sys.stdin.readlines())
ans = 0
for i in nos:
    if i>0 and i%k == 0:
        ans += 1
print ans 

Python2ソリューションとして送信すると、ソリューションが受け入れられます。

私はこれがどこに向かっているのか理解できませんか?...

====###更新###====

SebastianによるソリューションはPython3で機能しますが、私のpython2.7ソリューションよりもかなり10秒遅くなります。以前のバージョンと比較して、最新バージョンの言語ではパフォーマンスが低下するのはなぜですか?...

4

3 に答える 3

2

Python 2.7 ではまったく同じソリューションがテストに合格することを確認できますが、Python 3.1 ではタイムアウトになります。

import sys
try:
    from future_builtins import map # enable lazy map on Python 2.7
except ImportError:
    pass 

file = sys.stdin
n, k = map(int, next(file).split())
print(sum(1 for i in map(int, file) if i % k == 0))

file行に対する反復子です。このコードmapは、怠惰な (ファイル全体を一度に消費しない) ため、大きなファイルをサポートします。

次のコードは、python 3.1 でのテストに合格します。

import sys
n, k, *numbers = map(int, sys.stdin.buffer.read().split())
print(sum(1 for i in numbers if i % k == 0))

注:任意の大きな入力(および問題のコード)はサポートされていません。

于 2013-02-16T17:09:24.257 に答える
0

Python3 では、 のようなものは、リストの代わりにジェネレーターを返しますmapzipジェネレーターは、コードを TLE にするオーバーヘッドをもたらすと思います。実際のリストを作成するには、リスト内包表記を使用します[int(line) for line in std.sys]

于 2013-02-16T14:27:06.373 に答える
0

という行でエラーが発生しますn,k = map(int,sys.stdin.readline().split(" "))。と を分離しようとしましたnが、コマンドが呼び出されるとkすぐにスタックするようです。関数mapを説明するページは次のとおりです。 http://docs.python.org/2/library/functions.html#map私も IDLE も見つけられなかった構文で何かが奇妙に思えます。お役に立てればmap

于 2013-02-16T14:27:43.680 に答える