Re: [問題] 時間跑太久

看板Python作者 (←這人是超級笨蛋)時間13年前 (2011/08/10 04:56), 編輯推噓2(204)
留言6則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
謝謝!!所以我TLE的時候就是要加速了吧....QQ
08/10 12:18, 1F

08/10 12:19, , 2F
我是64bit該怎辦呀> <pypy是用python寫的python吧?
08/10 12:19, 2F

08/10 12:19, , 3F
那他寫程式的發法會跟普通大家用的py3不一樣嗎??
08/10 12:19, 3F

08/10 12:22, , 4F
啊我直接載來玩看看好了~^^
08/10 12:22, 4F

08/10 14:33, , 5F
喔喔我後來改成我自己測試的時候不用psyco
08/10 14:33, 5F

08/10 14:34, , 6F
上傳的時候再加上psyco~^^果然過了^^謝謝大大^^
08/10 14:34, 6F
文章代碼(AID): #1EGPxftY (Python)
討論串 (同標題文章)
文章代碼(AID): #1EGPxftY (Python)