Re: [問題] cin 與 eof的問題

看板C_and_CPP作者 (-858993460)時間14年前 (2010/05/29 05:11), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《coldstars (あら~)》之銘言: : 推 loveme00835:eof 不是一定要用來標示檔案結尾, 在標準輸入的時候 05/28 17:19 : → loveme00835:為了搭配istream_iterator 把輸入放在容器內, 也是要 05/28 17:20 : → loveme00835:用 eof 結束 05/28 17:20 : 推 loveme00835:剛看了一下10134, 是要用空白行分別不同的test case 05/28 17:28 : → loveme00835:原 po 看錯了吧 ? 05/28 17:28 : 推 loveme00835:是我看錯了XD 確實是用 eof 結束每個test case 05/28 17:40 : 推 loveme00835: ^所有 05/28 17:45 : 推 loveme00835:there is also a blank line between two consecutive 05/28 17:47 : → loveme00835:inputs. Input consists of a sequence of fish, bait 05/28 17:48 : → loveme00835:and lunch instructions, terminated by the eof. 05/28 17:48 我來講古了 那是在六、七年之前 當 ACM 還在舊 server (acm.uva.es/p) 還有所謂的藍勾勾 也就是 Multiple Input 這種東西的時候 之所以會有這種東西是因為當初題目是四處收集來的 有的題目當初在各比賽當時是一個測資一個輸入檔這個樣子的 這種題目也許為了能夠在 ACM judge system 做 judge 也或者是測資數目要增加等等 於是他們一開始的做法是在題目列表前面表示可以 Submit 的勾勾上用藍色表示 (那個列表長得像這樣 http://online-judge.uva.es/p/volume.php?vol=101 現在是只剩下表示 Special Judge 的黃勾勾了啦... 這個列表是在舊 server 時的題目列表 現在已經不用了 貼出來順便懷舊一下 XD) 這代表實際上的輸入是這樣子的: 一開始會有一個數字表示以下幾組測資 然後每組測資之間用一個空白行分隔 也就是類似像這樣: ======================= 4 <<測資一>> <<測資二>> <<測資三>> <<測資四>> ======================= 然後原題目的敘述就不動它了 這在 ACM 中被稱做 Multiple Input 輸出也是對應的 每組測資的輸出照原題目敘述 然後兩組測資的輸出之間印一個空白行 後來 2004 年初開始 ACM 的人決定把 Multiple Input 給消掉 (因為你每寫一題就要去注意這題到底是不是 Multiple Input 一不小心就會死在這種地方) (他們有在討論板上留下紀錄: http://online-judge.uva.es/board/viewtopic.php?f=26&t=4820 是說那時還只有 Vol.1~8 和 Vol.100~105 而已啊 (遠目)) 他們的做法就是在原題目 Input 和 Output 的地方加一句話 (就是現在題目中的那兩段粗體字) 表示題目的測資其實是長成像上面那個樣子 輸出也是對應那樣 然後原來的敘述一樣不動寫在下面 那因為不動的關係 所以原本「以 EOF 結束」的文字留下來就變成這種詭異情形了 這題的情形就是這個樣子 (這時就要再懷舊一下 Lucky 貓了 (最近好像沒什麼更新的樣子) 那邊翻譯的題目如果原題是 Multiple Input 的話會把相關文字加進 Input 的敘述裡面 所以看 Lucky 貓寫題目的人可能就不會被這個問題打到) 所以原 PO 你該做的應該是想辦法判斷出你讀到空白行 讓它表示測資結束 這個方法有很多種 以你的 10134 來說 因為測資全部都是字串 所以你可以利用 cin.getline 一次抓一行進來 第一個數字用 cin.getline 抓進來 然後看你要用 atoi 或 stringstream 讀都可以 接著讀掉一個空行 然後開始一組測資 每次都是 cin.getline 如果讀到空行就表示測資結束這樣 若是其他題目輸入有字串數字混雜的狀況 那就是用 cin.getline 配合 stringstream 來讀 (或是寫 C 的話是 gets/fgets 配合 sscanf/strtok) 以上 -- 是說其實我有點衰 因為我最後一次被這玩意婊到是在 2005 年 5 月 那時 (根據上面的文章) 只剩下 Vol.7 沒有消完 偏偏我被婊到的那題是 729 orz 最終 Vol.7 是在 2005 年 8 月消完的 -- 順帶一題, 剛剛說的 Special Judge 的黃勾勾 則是表示題目也許不只一組答案 或是題目允許你的浮點數輸出誤差到某個範圍 所以必須要用特殊的程式來判斷你的輸出是對是錯 而不是單純的用標準答案來比對 然後如果一個題目既是 Special Judge 又是 Multiple Input 則它就會是黃+藍=>綠勾勾 XD -- 'You've sort of made up for it tonight,' said Harry. 'Getting the sword. Finishing the Horcrux. Saving my life.' 'That makes me sound a lot cooler then I was,' Ron mumbled. 'Stuff like that always sounds cooler then it really was,' said Harry. 'I've been trying to tell you that for years.' -- Harry Potter and the Deathly Hollows, P.308 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.92

05/29 06:52, , 1F
首推 5年前阿(遠目
05/29 06:52, 1F

05/29 10:52, , 2F
讓程式治癒我們 qq
05/29 10:52, 2F

05/29 14:25, , 3F
好專業<(_ _)>
05/29 14:25, 3F
文章代碼(AID): #1C035pZR (C_and_CPP)
文章代碼(AID): #1C035pZR (C_and_CPP)