AHC043に参加し、最終的に212位でした。得点としてはプレテストで152M点です。
やったこと
初日
とりあえずサンプルとしてあるPythonのコードを提出する。1.1M点でとりあえずこれが最低点だなと分かった。
3日目くらい
何から手をつけていいかよく分からなかった。
とりあえず最初に建てる2つの駅の内、Incomeが最大になる2点を全探索して提出。3.7M点だった。
全探索だけで1100msかかっていたので2点のx座標lx,rxについて のパターンだけに絞ったところ、想定通り半分くらいの時間になった。
その後、繋げることで最終ターンのスコアが最大になる駅を貪欲に繋げていった。線路長や線路の経路は既存の駅を始点としてBFSで決めた。1 これで提出したところ11Mとそれなりにスコアが増加した。 その他に、線路上も駅の候補としたり、駅の効果範囲内にあるがまだ相方が駅の範囲内に無い家・職場の経路も将来の収入として何割か加算したりした(これは20パターン位を毎度毎度試した)。その結果44Mと結構点数が上がった。この時点で115位だった。
6日目くらい
改善点分からないなと思いながらビジュアライザで動きを見てたところ、動きが不自然だったのでコードを見直したら、途中で追加した駅がBFSの始点に入っていなかった。これを追加したところ点数が伸びたが、実行時間も非常に延びてかなりパターンを減らす必要があった。なぜ始点が増えただけでこれだけ時間がかかるようになったかはよく分かっていない。最終的に時間ギリギリに納めて108Mと当初の100倍くらいになった。
10日目くらい
シミュレーションと実際の点数で乖離があり、その理由を調べたところ同じ点に複数の家や職場がある可能性を考慮していなかった事が分かった。それを正しく扱ったところ、151Mとそれだけで50%改善した。このときで110位くらいだった。
それ以降
改善点が思いつかなかったのでコードを綺麗にクラスに分けるとかしていた。 駅の位置を決めきった後に、駅の設置順序を焼きなまして改善できないか試したが、時間がかかる分将来性の割合の試すパターンが減ってスコアが落ちたので止めた。
コンテスト後
解説やTwitterで見たBFSの順序のランダム化や序盤のWait時に将来の線路を建てておく2、をやったところ155Mとなりぎりぎり200位に入れるかもという感じだったので惜しい。
感想
最初はどうすればいいか全く思いつかなかったが、色々試していくと点数がどんどん伸びていったので非常に面白かった。 しかし、結局焼きなましやビームサーチを全然使えなかったのでコンテストでそれらを使えるようになりたい。