Re: [問題] ACM 200
看板Prob_Solve (計算數學 Problem Solving)作者bleed1979 (十三)時間14年前 (2010/04/24 04:34)推噓2(2推 0噓 0→)留言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
04/25 22:39, 1F
推
04/26 17:20, , 2F
04/26 17:20, 2F
討論串 (同標題文章)
Prob_Solve 近期熱門文章
PTT數位生活區 即時熱門文章