Daily Archive for May 7th, 2008

TopCoder::SRM::401

ひさびさにTopCoderについて書き残してみます。 自分はまだまだへぼいのでDiv2の話。

Easy

問題, コード

二次元座標上の2点が与えられて、その線分上にある格子点 (端点は含まない) の数をかぞえる問題。

2点を通る線分は、

y = (y2-y1)/(x2-x1) * (x-x1) + y1
( x1 < x < x2 )

で表現できるので、(x, y) が格子点かどうかは (y2-y1)*(x-x1) が (x2-x1) で割り切れるかどうかで判断できます。

というコードを10分くらいで書いてsubmitし、200ptsを得たものの何か不安を感じて、

(x1, y1) = (0, 0), (x2, y2) = (0, 50), 期待する返り値: 49

のテストケースをローカルにつくったところ、みごとにアウト。 x2=x1 のケースが境界条件でした。

いそいでこの場合だけを特殊化して再びsubmitし、結果は150pts。ペナルティきつい ><

Medium, Hard

どちらも問題は分かるし、解決策の背中は見えてくるんだけど、コードにできず。これじゃまだまだDiv2から抜けられないな…

Challenge

今回のEasyは、きっと境界条件の処理が甘いコードがあるにちがいないと踏み、さっきやったテストケースでchallengeしてみました。初めてchallengeに成功し、+50pts。

他のひともがんがんchallengeしており、Room内は死屍累々としていました。

result

結果

System Testで無事にEasyがとおり、こんなところ。 Ratingは前回よりも+30で894ptsになりました。あと+6で緑コーダー。