作者nevikw39 (☆牜攵☆犬羊)
看板C_and_CPP
标题[问题] zj e295. IO 优化
时间Wed Jul 10 12:47:46 2019
大家好,
暑假废惹那麽多天,今天总算来做点有意义的事喇
题目网址:
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://webptt.com/cn.aspx?n=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