作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] 时间跑太久
时间Wed Aug 10 04:56:06 2011
※ 引述《flere (人间失格)》之铭言:
: n , k = [int(s) for s in input().split()]
: count = 0
: for i in range(n):
: num = int(input())
: if num % k == 0:
: count += 1
: print(str(count))
: 我觉得看起来真的颇正常
: 就算是其他语言他的algo应该也是一样的
: 那为什麽会超时呢??
: 我看到了一个通过的C的写法
: 几乎依样
: 他也是用%去做> <
因为 C 语言就是快...这是没办法的事情XD
用 % 当然是对的
其实在它的 FAQ 里就有写了
http://www.codechef.com/wiki/faq#Why_do_I_get_a_Time_Limit_Exceeded
你做的那个 Enormous Input Test 直接就被拿出来当例子
得到时间过长的原因通常有两个:语言问题, 或者 I/O 问题
对於 Python 而言, 首先你要用 Psyco 加速
这是一个 Python 的 JIT interpreter, 可以用来加速
(不过不支援 64 位元很讨厌, 而且我前阵子发现 PyPy 把它电爽爽...)
在你的程式码前面加上两行:
import psyco
psyco.full()
就可以啓用 Psyco
不过我做下去还是一样 TE
主要还是 I/O 的问题, input() 太慢
我写这样就过了
import psyco
psyco.full()
import sys
n, k = [int(s) for s in sys.stdin.readline().split()]
count = 0
for i in range(n):
if int(sys.stdin.readline()) % k == 0:
count += 1
sys.stdout.write(str(count))
sys.stdout.write('\n')
直接一行一行读 sys.stdin, 不要用 input 函数
print 也是很慢, 不如直接 sys.stdout.write
不过这个只有一次所以其实差不了多少, 不是重点
这些加速其实日常写程式不太会用到
需要使用者输入时函数本身快慢根本感觉不出来, 因为使用者的脑最慢...
不过 sys.stdout 和 sys.stdin 其实还满好用的
尤其是玩一些输入输出花招的时候XD
--
Les grandes et les meilleurs
tone from "Zadok the Priest"
Eine grosse stattliche Veranstaltung
by F. Handel
THE MAIN EVENT! These are the men
Sie sind die Besten
"Champions League" by Tony Britten THESE ARE THE CHAMPIONS!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.243.14.80
※ 编辑: uranusjr 来自: 111.243.14.80 (08/10 05:01)
1F:推 flere:谢谢!!所以我TLE的时候就是要加速了吧....QQ 08/10 12:18
2F:→ flere:我是64bit该怎办呀> <pypy是用python写的python吧? 08/10 12:19
3F:→ flere:那他写程式的发法会跟普通大家用的py3不一样吗?? 08/10 12:19
4F:推 flere:啊我直接载来玩看看好了~^^ 08/10 12:22
5F:→ flere:喔喔我後来改成我自己测试的时候不用psyco 08/10 14:33
6F:→ flere:上传的时候再加上psyco~^^果然过了^^谢谢大大^^ 08/10 14:34