1時間目
2時間目
・lを考慮
3時間目
・辺のコストが同じ時はインデックスが後の辺を優先して最小全域木に使う
4時間目
・無
・これ以上何ができるのか全く分からず
感想
辺のコストを1.8dにしたら1408(155位)くらいがでました
2dじゃだめなんですか?
(注意)コンテスト中に書いたものなのでかなり読みづらいです。
https://atcoder.jp/contests/future-contest-2022-qual/submissions/27198960
感想
ローカルに提出できるような環境を作った方がいい(めんどくさい)
線形代数は勉強した方がいい
比較的当たりの解法を引けた回だったと思う
117位
ジャッジから与えられるパスの長さの情報をもとに辺の長さをどうにか推測して最短経路問題の復元をおこないました。
まず、通った回数が一番多い辺を一つ選びます。
次に、選んだ辺が含まれているパスのを使って辺の長さを推測します。
このとき、 の平均を推測した値として使いました。
最後に、パスのと、パスが含んでいる辺の個数を、選んだ辺の分だけ引きます。
上の操作を全ての辺に行うまで繰り返します。
縦と横の辺に対してガウシアンフィルタをかけるようなことをしました。
M=1の場合に対しては、行(または列)の辺の長さを平均したものを、行(または列)の辺全てに上書きしました。
M=2の場合に対しては、よく分からなかったのでお気持ちをしました。
具体的には、行(または列)の辺を、ある辺を中心とした座標を変数にとる正規分布に従う重みで平均して、正規分布の中心の辺の長さを重みつき平均の値で上書きしました。
全ての辺が中心になる場合を計算して、全ての辺の長さを上書きしました。
本当はM=1とM=2を区別して処理を切り替えたかったんですけど、うまく区別することができませんでした。
なので、スコアが最大になるような比率を調べてM=1用の処理とM=2用の処理をどっちも使いました。
推測した辺の長さを使ってダイクストラ法で最短経路問題+復元を解きました。
初めて見るタイプの問題で本当に楽しかったです。
他の人の解法を見て、いろいろ勉強したくなりました。
codingame spring challenge 2021に参加しました。
全体252位、ゴールド25位でした。
レジェンドに一歩及ばず😭
最初は相手の動きを考慮しないビームサーチを実装しました。
評価関数は「100000×スコア+1000×サイズ1の木+1000×サイズ2の木+1500×サイズ3の木+SUN」です。
スコア>木>SUN の順に評価してくれるように雑に決めました。
枝刈り(行動制限)を試行錯誤しているうちにGoldになれました。
この枝刈りは改良しながら最後まで流用しました。
Gold昇格後は、だんだんとビームサーチの評価関数を考えるのがしんどくなってきたため、ビームサーチを捨ててTwitterで見かけたDUCTを実装してみました。
ぼくは英語が読めないので図を解読しました
なんとか実装したDUCTですが、プレイアウト回数がうまく増やせず弱かったです。(もしかしたらバグってたかも)
DUCTを強くする方法が思いつけなかったため、他の実装を試すことにしました。
DUCTの実装を無駄にしたくなかったので、「有向手をプレイアウトして勝率を計算し、一番勝率が高かったものを採用する」というものを実装してみました。
有向手の選択には、UCB1を使いました。
これで252位までいけました。
最終的な枝刈り(行動制限)は以下のようになりました。
SEED
GROW
COMPLETE
WAIT
楽しかったです
焼きなまし
1×1の正方形
遷移は一種類だけでした
スコアが最大になった解を保存して出力。
一週間もあったのでいろいろなアイデアを試せて楽しかったです。