[問題] zj e295. IO 優化
大家好,
暑假廢惹那麼多天,今天總算來做點有意義的事喇
題目網址:https://zerojudge.tw/ShowProblem?problemid=e295
我現在的問題是,寫了個自訂的讀整數函式,卻沒有辦法準確知道何時 EOF。
在我的 Windows 10 (gcc 6.3), WSL Ubuntu (gcc 7.3) 上遇到 Crtl + Z 或 Crtl + D 都
可以正常離開,但在 ZeroJudge 連範例測資測試執行都會 TLE 被 killed。
程式碼:https://pastebin.com/YzWYFedy
請各位大大不吝給予意見指教,謝謝
順便問一下,同樣是函式模板,為什麼 out 就會自動推導型別,in 卻得自己指定呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.107.240.213 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1562734074.A.FD1.html
→ loveme00835: 你用 I/O redirection 試試看行為是怎麼樣 07/10 12:55
https://i.imgur.com/ykW1Fbk.png

這樣算是正常吧
※ 編輯: nevikw39 (106.107.240.213 臺灣), 07/10/2019 14:19:38
→ sarafciel: 你要用某個函式,參數一定會填,但回傳值不一定會接呀 07/10 14:58
請問 s 大是什麼意思?
我現在的 in 遇到 eof 應該是回傳 0
※ 編輯: nevikw39 (101.137.5.0 臺灣), 07/10/2019 15:18:52
→ sarafciel: well,我是在回答你型別推導部份的問題 07/10 15:24
喔喔 所以原來模板只會推導參數的部分啊
→ longlongint: 你一次讀一個字元? 07/10 21:33
→ longlongint: 我推測你這樣寫比scanf慢哦 07/10 21:35
我還沒有實測喇 請教還有什麼更快的方法?
fread 讀一整行再來拆囉
※ 編輯: nevikw39 (106.107.176.158 臺灣), 07/10/2019 22:21:42
→ longlongint: 一次讀一千個字進來呀 07/10 22:48
→ sarafciel: 對 或者這樣講 今天我假設C++讓你可以用回傳值型推好了 07/11 09:19
→ sarafciel: 然後我用你的程式補一行out(in()); 請問這一行的out跟 07/11 09:21
→ sarafciel: in編譯器該把T代什麼型態給你?XD 07/11 09:22
推 suhorng: 你要判斷 fread 讀了 0 還是 1 07/11 13:17
→ suhorng: 不然有可能未定義然後卡在 in 的 do-while 裡 07/11 13:18
→ firejox: 我猜最後一行沒換行 07/11 14:10
→ firejox: 然後又重複利用相同的空間導致跳不出 do-while 07/11 14:11
→ firejox: 基本上整個是未定義行為 07/11 14:21
→ firejox: 在讀到檔尾時,get的回傳是未初始化變數 07/11 14:26
我在 in 加了:
if(feof(stdin))
exit(0);
測試執行還是過不了欸
※ 編輯: nevikw39 (101.137.142.248 臺灣), 07/11/2019 22:10:21
→ firejox: 你那段加在哪阿,重點是要跳出迴圈 07/11 22:42
原本是在 return n; 前,現在把他放進 do-while 內結果變成少一行。感覺快突破惹
※ 編輯: nevikw39 (106.107.176.158 臺灣), 07/11/2019 23:07:55
會少一行應該就是最後一筆直接 exit,所以我想說加入判斷 n 值。但如果用 feof(stdin)
&& !n 會 TLE, && n != 0 卻還是少一行欸
※ 編輯: nevikw39 (106.107.176.158 臺灣), 07/11/2019 23:30:11
終於先過測試執行惹,謝謝大家
https://pastebin.com/uNbeMcp0
※ 編輯: nevikw39 (106.107.240.213 臺灣), 07/12/2019 21:46:37
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章