RCOハーフマラソン2017
予選
貪欲。
本戦
A問題
本番
sellコマンドの最初にnを出力するのを見てなくて20分ぐらい取られた。
- 30以上買ってくれる客に売れるなら売る(sell)
- タンクの容量が合計40以下なら一番小さいのから取り替える(change)
- まだ石油入れてないタンクに石油入れる(fill)
- 上記をすべてやっていて、単価30以下か、現在のタンクで支払えない客なら帰ってもらう(pass)
っていうのをifelseで書いたら、その時点で5位ぐらいだったのでそれ以降ほぼ手を付けなかった。
最後に売る客のしきい値を25に変えたら60000ぐらい上がったのでそれだけ。 現在のタンクの組み合わせで実現できる数が少ないとき(同じ容量のタンクばっかりとか)にやたらパスしてたので、その時もchangeするようにしたかったけど時間足りず。 最終 6315976点 13位
反省
解説で聞いた、売るときにどのタンクから売るかを考慮に入れてなかった。 sellでハマってたときにテスターのバグとすら思っていた(テスターのデバック上ではnにあたる数しか表示されず、手入力で入力を与えたら普通に出力されたため)ので、出力の形式はちゃんと読もう。(というか解答側が自由に個数指定して出力する問題で個数出力し忘れるの何回もやってる気がする……。)
B問題
本番
方針が定まらずとりあえず貪欲書いていろいろパラメータいじって試してた。 この時「ターン数かけてきっちり揃えに行くより数百ターンで雑に近づけた方がいい」と思ってしまって方針を間違えた。(移動不可な場所を壁として経路探索してたのでターン数かけると時間が足りなくなってたのも原因)
最終的に、 ゴールの位置が外側の車から動かして
- ゴールへの経路があるものはその経路に従って進む。
- 経路が無いものは
- 2割の確率で壁を無視してゴールにまっすぐ向かう。
- 8割の確率でランダムに動く。
というふうなのを300ターン行った。
最終 8918点 22位
反省
ランダムに動くときに動ける方向のみから選ぶだけで点数もっと上がった気がする。
→実際に実装してランダム移動する確率5割ぐらいにしたら2倍ぐらい点数上がった。
全体
最終順位:13+22=35 で全体13位 学生8位 社会人のおこぼれで賞金をもらえた。 プロコンで入賞できんたのが初めてなので嬉しい。 雑に点数が取れる方針を立てる能力は高いので、自分に有利なコンテストだった。(テスターなどがJavaで提供されてるのも有利)
RCO紹介
競プロer向けにわかりやすい企業紹介だった。 17時出社が魅力的だった。
懇親会・解説
B問題のビジュアライザを用いた解説は見ててとてもおもしろかった。 ピザとチキンだけだったので胃に重かった。 8時に新幹線だったので早退した。
反省
コミュ力。
終わりに
4時間ぶっ続けで考えるのは疲れるけど楽しい。問題も面白かったので、またあったら参加したい。
その他
・マウスを忘れたので近場でマウスを買った。
・朝7時起きは辛い。
・A問題のテスターはEclipseのMainファイルと同じ場所置いてテスターのmainメソッドに
command = “java -classpath bin Main”;
と書くとEclipse上だけでテストできて便利だった。
・B問題は出力をテキストにするためにわざわざ自作ゲームライブラリのテキスト出力クラスを使った。(絶対コマンドライン使いたくないマン)
・Eclipseに出力をファイルに書き出す機能はありそう。