作者bleed1979 (十三)
站内Prob_Solve
标题Re: [问题] ACM 200
时间Sat Apr 24 04:34:12 2010
※ 引述《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
1F:推 Eric30:推这个方法,我也都是这样确认的 XD 04/25 22:39
2F:推 hialan:谢谢你! 04/26 17:20