EvbCFfp1XB

イーブイ進化系 C7BMkOO7Qbmcwck7(AtCoder) dtwYhl0YJqzOnZKi(CodinGame) AnlJ8vIySM8j8Nfq(Codeforces) j8LsXlKzJPRosaXt(Kaggle)



Approach 無効な状態を許容する焼きなまし法です。

  • 近傍 : 1つマスを選んで、そのマスの数字を元の数字にもどす、または隣のセルの数字と同じ数字にする
    • 1つマスを選んで数字を±1する近傍で、探索空間が連結になるので、これでいいかなと思っていたら、上のの方が良かった。
  • ペナルティー : max(0,操作数 - M) の2乗
  • 数字が1のマスを収穫しない。




Approach 解説とほとんど同じです。

  • 今いる場所が不明箇所なら開ける
  • 最も近いペアを作る、または最も近い不明箇所を開ける
    • (最も近い不明箇所の距離 * 3.1 < 最も近いペアの距離 ? 不明箇所 : ペア) を選ぶ
    • 同じ距離なら中心に近い方を選ぶ
  • バタフライ効果が見られる。テストケース 50 個は少ない。




Approach ビームサーチです。

  • 各点の重み : (1 << 3 * 中心からのチェビシェフ距離)
    この後、対角線上の点なら 4 倍、その隣なら 2 倍する。
  • 評価関数 : 各点ごとに、合ってたら 1 ,違ってたら -1 を重みに掛けて和をとる。
    この評価関数は、外側からそろえる。
  • 次の深さのノードの作り方 : バウンディングボックスに完全に含まれるまわし方で、バウンディングボックスの端またはその一つ内側を含むものに限定
  • 重複除去に Zobrist hashing
    • 現在の深さのノード群を評価が良い順に見ていくときに除去する方法と、次の深さのノードを作るときに除去する方法が有ると思いますが、今回は前者を使いました。ハッシュセットを使わずに、評価とハッシュで並べ替えて、直前のノードと同じハッシュなら除去した。
  • ビーム幅 : 残り時間を275等分して、各深さごとできるだけ多くノードを見る。最初の方は1とか2で、最後の方は3桁くらい。
  • たまに完全解にならない

  • うまくいった時 208手(input_1.txt)



  • 時間制限10倍 うまくいった時 193手(input_1.txt)



  • 時間制限100倍 うまくいった時 174手(input_1.txt)




↑このページのトップヘ