SRM265 - Division2 落ち...
SRM265E に挑戦.前回急降下したレーティングは 1255 です.まだ 1200 以上なのでかろうじて Division1 には残っています.前回はポイント ゼロだったので,今回こそは一問でいいから System Test に通ることを目標に.今回もゼロだとおそらく 1200 以下に落ちます.
ScheduleStrength (code)
250 点問題. リーグ戦において
- ある 2 チームの勝率が同じだった
- どちらか 1 チームをプレーオフに進出させなければいけない
このような状況のとき,より厳しいスケジュール・強い対戦相手と戦ってきたチームを優先させましょう.このスケジュールの厳しさを計算せよという問題です.これもやはりただ実装するだけという問題なのですが,最初,意味を勘違いしていたこともあり,大幅に時間がとられてしまいました. しかし,44 分は時間かけすぎ.
Recipe
500 点問題. 料理の正しいレシピ (例 - 塩:大さじ 4,砂糖:小さじ 18, 醤油: カップ 2 杯) と, 実際にボールに入れて混ぜてしまった量(例 - 塩:大さじ 4,砂糖:小さじ 19, 醤油: カップ 3 杯)が与えられます.この時,正しいレシピの割合にするには,ボールにあとどれだけ各調味料をいれればよいでしょうか?という問題です.必要以上にいれてはいけません. この例の場合は,あと (塩:大さじ 4,砂糖:小さじ 17, 醤油: カップ 1 杯) 追加はいれすぎです.正解は(塩:大さじ 2,砂糖:小さじ 8, 醤油: カップ 0 杯) になります.
うーん,時間切れでした.最大公約数を使用すれば,エレガントにとけますが,それ以外の方法では制限時間の 2 秒以内には終わらない可能性があります.実際,SRM 後にコードを完成させたのですが,最悪の入力ケースでは 2 秒以内に終了しませんでした.
PokerDeck
1000 点問題.SRM 中は Open できませんでした.この問題に正解したのは,Division1 参加者 333 人中 1 人だけです.. ( Problem Detail )
結果
今度こそ,250 点問題は Pass すると思ったのけど...System Test の結果です. ( Room Statistics )
あれー.また System Test に落ちてる.ここでした..
t.p = (double) w / (double) l;
勝率の計算を win / (win + lose) でなく,win / lose で行っています.またもや,あきれるくらいの単純なミス.これで Example にすべて通ってしまったのが,運が悪かった..今回も,Challenge Time では誰もここにきずかなかったのか,誰もチャレンジしてきませんでした.
他の人のソースを見てみると,あらかじめ,勝率を
(double)w / (double) total
と (勝数) / (試合数) を計算しておいて,double になった勝率どおしを比較するのではなく,
my.win * your.total - your.win * my.total
として,比較しているのが見受けられます.全て整数どおしの計算になるので,double にまつわる問題を避けることができます.なるほど.
今日の教訓
- Example Case にとおったからといって,正解とはかぎらない.
- おちつけ
- double どおしの比較は避けれるものなら避ける.整数ですべて片付くならそちらを採用. (a / b) と (c / d) を比較するには a/b - c/d ではなく,a * d - c * b のほうがよい.
レートは 1255 -> 1097 とやはり急降下.Division2 行きが決定しました...名前も緑に. 2 軍におちる選手の心境がすこしはわかったような.