[問題] ACM10062

看板C_and_CPP作者 (wi)時間14年前 (2011/08/30 12:55), 編輯推噓2(2044)
留言46則, 6人參與, 最新討論串1/1
問題(Question): wa 預期的正確結果(Expected Output): ac 程式碼(Code):(請善用置底文網頁, 記得排版) http://nopaste.csie.org/68182 補充說明(Supplement): 一開使用 vector<pair<int,int> > 前面的int是存ascii code 0~127,後面的int是存次數 之後把輸入的數值存入input 然後21行的for就做初始化的動作,將ascii的0~127寫入,也一起把次數歸零 接著將整個input用for跑一遍,將各個ascii出現的次數+1 之後用stable_sort 然後再把次數非零的資料印出 在UVA toolkit試過一些測資都沒有錯誤 不知道是那邊得到wa 麻煩大家了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.230.129.70

08/30 14:00, , 1F
最後一組測資之後沒有空白行的樣子
08/30 14:00, 1F

08/30 14:36, , 2F
你沒檢查輸入的字元是否為一般字元,記得加入
08/30 14:36, 2F

08/30 14:39, , 3F
if (isprint(input.at(i)))去檢查它.
08/30 14:39, 3F

08/30 14:40, , 4F
不然隨便輸入。,就給你程式記憶體區段錯誤
08/30 14:40, 4F
我把中間增加的for改成 for(int i=0; i<input.size(); i++) { if (isprint(input.at(i))) { ++p[static_cast<int>(input.at(i))].second; } } 還是一樣wa 他輸入的應該都是ascii內有的吧?? 因為我沒有得到runtime error ※ 編輯: diabloevagto 來自: 125.230.129.70 (08/30 14:44)

08/30 14:46, , 5F
類似的題目,我是開 int freq[257] 去記耶..
08/30 14:46, 5F

08/30 14:46, , 6F
我根本就不知道測資是不是保證 isprint XD
08/30 14:46, 6F

08/30 14:48, , 7F
況且要塞 non-print 也很容易,不是嗎?
08/30 14:48, 7F

08/30 14:49, , 8F
我真的覺得這個很玄...如果可以顯示那個測資錯就好了
08/30 14:49, 8F

08/30 14:53, , 9F
其實那只是猜測,因為覺得你沒把擴充字元考慮進去.
08/30 14:53, 9F

08/30 14:55, , 10F
我把那字元增加到1000也wa...
08/30 14:55, 10F

08/30 14:56, , 11F
小提一下,你增加的話,是要將 char 強轉成 unsigned int
08/30 14:56, 11F

08/30 14:56, , 12F

08/30 14:56, , 13F
目前是改成這樣,但也只是更改增加那邊,還是wa
08/30 14:56, 13F

08/30 14:57, , 14F
我不太理解,為何不是用unsigned char去抓字元
08/30 14:57, 14F

08/30 14:58, , 15F
請問是指說不要用string,用unsigned int?
08/30 14:58, 15F

08/30 14:58, , 16F
他用的是 getline + string,取得的是 char,非 uchar.
08/30 14:58, 16F

08/30 15:02, , 17F
++p[input.at(i)].second<--這樣就可
08/30 15:02, 17F

08/30 15:05, , 18F
原來轉型是多餘的,了解了
08/30 15:05, 18F

08/30 15:05, , 19F
1F L 大不是已經說答案了嗎,以下連結是改過的 code
08/30 15:05, 19F

08/30 15:05, , 20F
http://nopaste.csie.org/bc042 <== 只改了 3 個地方 XD
08/30 15:05, 20F

08/30 15:06, , 21F
不好意思,我想問多問, input.at[i] 不會是負值嗎?
08/30 15:06, 21F

08/30 15:09, , 22F
感謝大家的指教,更改換行就可以了
08/30 15:09, 22F

08/30 15:10, , 23F
因為我想說他輸入的都是ascii code就沒有考慮負值了
08/30 15:10, 23F

08/30 15:10, , 24F
字元應該沒有負值吧?
08/30 15:10, 24F

08/30 15:11, , 25F
排版還真是麻煩...要怎麼看最後有沒有換行?
08/30 15:11, 25F

08/30 15:13, , 26F
結果又是誤解題目Orz
08/30 15:13, 26F

08/30 15:14, , 27F
diabloevagto,改成用argv去讀字串,輸出到筆記本就可以看
08/30 15:14, 27F

08/30 15:15, , 28F
不好意思麻煩大家了= =
08/30 15:15, 28F

08/30 15:15, , 29F
學藝不精想問這問題 http://codepad.org/xWrn6zbZ
08/30 15:15, 29F

08/30 15:16, , 30F
是我觀念有誤嗎?
08/30 15:16, 30F

08/30 15:16, , 31F
我想問說題目要求的output有沒有換行...常常卡在排版
08/30 15:16, 31F

08/30 15:17, , 32F
t大學藝不精...那我Orz
08/30 15:17, 32F

08/30 15:19, , 33F
我猜測是因為string內定的是char,輸出後就溢位?
08/30 15:19, 33F

08/30 15:20, , 34F
因為char的值在0~127.當你超過這個數值,LSB就為1
08/30 15:20, 34F

08/30 15:21, , 35F
當然之後就顯示為負數拉,對,是溢位. 所以我才好奇為何
08/30 15:21, 35F

08/30 15:22, , 36F
一開始vector的型態不宣告為unsigned char.
08/30 15:22, 36F

08/30 15:22, , 37F
雖然沒助益,我原意是 ++p[(size_t)input.at(i)];
08/30 15:22, 37F

08/30 15:23, , 38F
嗯, 謝謝 a 大指教 *^_^*
08/30 15:23, 38F

08/30 15:26, , 39F
因為最後題目要求說要輸出ascii code,所以我就直接
08/30 15:26, 39F

08/30 15:27, , 40F
宣告成int,這樣就可以不用再static_cast<int>
08/30 15:27, 40F

08/30 15:30, , 41F
如果要用數值的我用unsigned int會比較好嗎?
08/30 15:30, 41F

08/30 15:33, , 42F
對不起,更正一下是msb(most significant bit)
08/30 15:33, 42F

08/30 15:41, , 43F
可能我多心了,題目最後是輸出 ascii (code) 非 (chr)
08/30 15:41, 43F

08/30 15:42, , 44F
若在做統計時,array index 會是無號數,我認為用u較佳。
08/30 15:42, 44F

08/30 15:44, , 45F
了解,受教了
08/30 15:44, 45F

08/30 22:29, , 46F
文章代碼(AID): #1EN6rA2_ (C_and_CPP)