Re: [問題] ACM 200

看板Prob_Solve (計算數學 Problem Solving)作者 (十三)時間14年前 (2010/04/24 04:34), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《hialan ( )》之銘言: : 抱歉問這麼簡單的問題,但是困擾我一陣子了QQ : 題目:http://uva.onlinejudge.org/external/2/200.pdf : 我用的解法跟他差不多,都是先建立有向圖,然後問誰 degree = 0 : 從後面把答案建起來:http://info.codepub.com/2008/07/info-20555.html : 我的 code: http://tinyurl.com/2d6o6ol : =========================== : 但是我上傳上去都會出現 Runtime error ... : 想請問我有哪些情況沒想到,會造成 Runtime error 呢? 跟runtime error無關的︰ 1.輸出答案要換行。 2.//註解要拿掉(ANSI C)。 runtime erro的地方︰ if(last[0] != 0 && (n = getOrderPos(last, buf)) >= 0) { /* the order: last[n] > buf[n] */ ptr0 = table[last[n]-'A']; ptr0->list[ptr0->num_list++] = table[buf[n]-'A']; ^^^^^^^^^^^^^^^^^^^ } 考慮table[buf[n]-A']會重複,造成num_list加到爆表。 所以我稍微改了code。 for (k = 0; k != ptr0->num_list; ++k) if (ptr0->list[k] == table[buf[n]-'A']) break; if (k == ptr0->num_list) ptr0->list[ptr0->num_list++] = table[buf[n]-'A']; 這樣就可以通過了。 題外話︰ 怎麼抓這個程式的bug呢? 首先我確定這是一個會runtime error的code, 所以我在程式可疑的地方加判斷式或return(0); (或是你要assert) 如果會從runtime error變成wrong answer,就代表我的懷疑的地方是正確的。 會浪費submit數,但這是一個抓法,僅供參考。 Bleed -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.177.97

04/25 22:39, , 1F
推這個方法,我也都是這樣確認的 XD
04/25 22:39, 1F

04/26 17:20, , 2F
謝謝你!
04/26 17:20, 2F
文章代碼(AID): #1BqWH7wI (Prob_Solve)
討論串 (同標題文章)
本文引述了以下文章的的內容:
14年前, 04/23
完整討論串 (本文為第 2 之 2 篇):
14年前, 04/23
2
2
文章代碼(AID): #1BqWH7wI (Prob_Solve)