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这是一个解释该map函数的页面:http : //docs.python.org/2/library/functions.html#map 我或 IDLE 都找不到的语法似乎有些奇怪。希望这可以帮助

于 2013-02-16T14:27:43.680 回答