Re: [問題] 時間跑太久
※ 引述《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)
推
08/10 12:18, , 1F
08/10 12:18, 1F
→
08/10 12:19, , 2F
08/10 12:19, 2F
→
08/10 12:19, , 3F
08/10 12:19, 3F
推
08/10 12:22, , 4F
08/10 12:22, 4F
→
08/10 14:33, , 5F
08/10 14:33, 5F
→
08/10 14:34, , 6F
08/10 14:34, 6F
討論串 (同標題文章)