A - Ward the Village 解説
by
PrussianBlue
印刷ページ
ペア解法
例えば、下記のような解法で盤面全体を1巡することができます。
- 操作0を (38, 1)、操作1を (1, 38) とする
- 「操作0を99回繰り返した後、操作1を1回する」を100回繰り返す
提出(スコア: 460882245 / 244位相当):https://atcoder.jp/contests/ahc070/submissions/78756473
ここで、t=5000 のときのビジュアライザを観察すると、以下のような性質が見えてきます。
- 全ての (x, y) に対して、(x, y) と (x+N/2, y+N/2) のいずれか一方が塗られており、もう片方は塗られていない(座標は N を法として考える)
この事実を用いると、下記のようなペア解法が思いつきます。
- 例えばX = 38, Y = 1 とする(これ以外にも色々試し、最も良いものを採用)
- 操作0を (X, Y)、操作1を (Y, X)、操作2を (X+N/2, Y+N/2) とする
- 「操作0または操作2を99回繰り返した後、操作1を1回する」を100回繰り返す
- 操作0と操作2を適切に選ぶことで、各ターンでペア ((x, y) と (x+N/2, y+N/2)) のどちらを先に巡回するかを自由に選べる
どちらを先に回るかは、まだ神力が訪問していないもののうち、訪れるタイミングが早い方を選ぶようにしました。
提出(スコア: 620210291 / 27位相当): https://atcoder.jp/contests/ahc070/submissions/78757971
(延長戦・生成AIありで実装)
上のペアの選び方に対して、時刻 t, t+1, t+T/2, t+T/2+1 (T = 10000)について「操作0ならば操作2、操作2ならば操作0」と切り替えることで、他のセルの訪問に全く影響を与えずに、時刻 t に訪れるセルと時刻 t+T/2 に訪れるセルを交換することができます。
このスワップ近傍のスコア差分計算を高速に行えれば、上の貪欲で得られる解よりも良い解が得られます。
残念ながらコンテスト時間内には自力で実装できませんでしたが、生成AIに上記の方針を与えてスワップ近傍を実装してもらった結果、700M程度のスコアが得られました。
延長戦提出(スコア: 716036495 / 9位相当): https://atcoder.jp/contests/ahc070/submissions/78831201
投稿日時:
最終更新: