ひさびさに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内は死屍累々としていました。
結果
System Testで無事にEasyがとおり、こんなところ。 Ratingは前回よりも+30で894ptsになりました。あと+6で緑コーダー。

日本語
English