Re: [問題] zj e295. IO 優化

看板C_and_CPP (C/C++)作者 (Tangent)時間6年前 (2019/07/11 23:58), 編輯推噓1(101)
留言2則, 1人參與, 6年前最新討論串2/3 (看更多)
光用推文表達可能有點不太清楚,所以來回一篇了 ※ 引述《nevikw39 (☆牜攵☆犬羊)》之銘言: : 大家好, : 暑假廢惹那麼多天,今天總算來做點有意義的事喇 : 題目網址: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 卻得自己指定呢? 對於小測資會有TLE,通常是卡在有迴圈的地方。而這邊只有兩個地方是有迴圈的, 而且會影響while(!feof(stdin))的是輸入,因此要去檢查輸入函式。 Q1: 在讀到檔尾,或者遇到輸入錯誤時,他會回傳什麼? inline char get() { char buf[1]; fread(buf, 1, 1, stdin); return *buf; } A: 不知道,因為buf未初始化。(13誡第1條) Q2: 這樣會導致TLE? A: 會的,因為get()的回傳端看編譯器怎麼處理未初始化變數。 假設每次呼叫時buf的位址都一樣且都不會把區域變數內容清空。 那麼在讀到EOF時,get()會回傳最後一個輸入的字元。如果不是數字, 則會跳出do-while,反之則無窮迴圈。 Q3: ZJ的範測最後一行沒換行? A: 是,請注意游標位置。 分享點個人心得,要判斷輸入輸出是否有惱人的換行,可以善用反白, 你可以看得到獨特的小方格。 -- d(・ω・d) 微分! (∫・ω・)∫ 積分! ∂(・ω・∂) 偏微分! (∮・ω・)∮ 沿閉曲線的積分! (∬・ω・)∬ 重積分! ▽(・ω・▽)梯度! ▽・(・ω・▽・)散度! ▽×(・ω・▽×)旋度! Δ(・ω・Δ)拉普拉斯! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.232.143.51 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1562860697.A.12A.html

07/12 21:36, 6年前 , 1F
感謝 f 大,終於過測試執行惹。在 do-while 裡判斷是否
07/12 21:36, 1F

07/12 21:37, 6年前 , 2F
eof,是的話看 n 的值決定 return n; 或 exit
07/12 21:37, 2F
文章代碼(AID): #1T9roP4g (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1T9roP4g (C_and_CPP)