Hatena::Grouptopcoder

cou929のTopCoder日記

2009-04-19

SRM438 div2

03:35

Level one - UnluckyNumbers

20分くらいかかってしまった。チャレンジを成功させまくっている人がいて、さらにシステムテストでもほとんどの人が落ちたので、結局解けたのは部屋で二人だけ。落ち着いてチャレンジをがんばればよかった。

失敗していた人たちは、境界条件をうまく処理できていなかったみたい。特に、LuckyNumberとnがn<LuckyNumbarと連続していた場合({3,6}, 5など)に間違っているものが多かった。


Level two - FeudaliasBattle

こちらは解けてる人が少なくて(250点問題に時間をとられすぎたのかな)、さらにシステムテストで落ちまくり。僕も落ちた。結局部屋で通ったのは一人だけという状況。

原因はintのオーバーフローでした。下のように、xy座標系の2点間の距離を求める必要があったのですが、

double getdistance(int x1, int y1, int x2, int y2)
{
  return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
}

x1, x2, y1, y2 はそれぞれ、最大1000000の値をとる可能性があるので、1000000^2で桁あふれします。なので、自乗しているところをdoubleでキャストしてあげる必要があります。

double getdistance(int x1, int y1, int x2, int y2)
{
  return sqrt((double)(x1-x2)*(double)(x1-x2) + (double)(y1-y2)*(double)(y1-y2));
}

ちなみに、intは4バイトだとすると、プラスマイナス約20億くらいまで格納できます。doubleの範囲は、

2.225074 10-308 < double の絶対値 < 1.797693 10+308

です。この上/下限値は <float.h> の DBL_MIN, DBL_MAX というマクロに定義されています。


TopCoder部@はてなに参加

09:40

TopCoder部

topcoderでぐぐっていたらたまたま発見したので、参加してみました。よろしくお願いします。

みてみると皆さんdiv1で活躍されている方が多く、恐縮しました。僕はまったりdiv2の日記をつけていこうかと思います。今年の目標青色になること。

JasonWeidoJasonWeido2017/01/25 04:21печать блокнотов с логотипом http://wkrolik.com.ua