ももはらの日記

日記を書きます

AHC037参加記 71位解法

はじめに

こんにちは。ももはらです。 AHC037で初黄パフォをとったの参加記を残そうと思います!

問題概要

atcoder.jp

  • N個の(a,b)の座標を作りたい
  • 次の操作を0回以上5N回以下できるので、できるだけコストを最小化したい
    • 座標 (x,y) から x'>=x, y'>=y の座標 (x',y') をコスト (x'-x) + (y'-y)で作ることができる
    • 元の座標も残る

実装

案1: 一番近い座標から作ってみる

  • 考察
    • まずはN点直接作る場合について考えると、最短距離の座標から伸ばすのが最適
  • 提出
  • 得点: 3430697513
  • sample0の結果: Cost = 43850900145, Score = 22803065

案2: くの字の位置の右下に中継点を足してみる

  • 考察
    • コスト (x'-x) + (y'-y) でx,y独立なので、 (x', y') -> (x', y) -> (x,y) みたいに、x,yそれぞれで動いてもコストは同じ
    • くの字の位置に中継点を置いておく
  • 提出
  • 得点: 4072232940
  • sample0の結果: Cost = 36739552599, Score = 27216851

案2': くの字の位置の右下に中継点を足してみて、使わなかったら左上においてみる

  • 考察
    • 右下に置いた中継点を使わなかったら、左上に中継点置いてみる
    • 確実に損はしないのでこの方針を書いてみた
    • (後の方針とぶつかったので案3の時には消えました)

=>

  • 提出
  • 得点: 4386163855
  • sample0の結果: Cost = 34370792954, Score = 29092576

案3: 左の直線に伸ばした方がよくなるなら、直接伸ばしてみる

  • 考察
    • すでに左側に直線があったら、そこに中継点を置いて、伸ばした方がいいパターンがある

=>

  • 提出
  • 得点: 4534273060
  • sample0の結果: Cost = 33013876167, Score = 30288322

案4: 下の直線に伸ばした方がよくなるなら、直接伸ばしてみる

  • 考察

    • 案3の下に伸ばすバージョン
  • 提出

  • 得点: 5120976945
  • sample0の結果: Cost = 29490148079, Score = 33907423

案5: 無駄な頂点をのぞく

  • 考察
    • みやすくしたら考察しやすくなるかなーと思ったら何故かスコア伸びた
  • 提出
  • 得点: 5218181604
  • sample0の結果: Cost = 28842972744, Score = 34668234

おわりに

最終順位は71位でした!

マラソンぽい解法が入らない回の方が成功しがちですが、ちょっとずつマラソンぽいのもできるよう頑張りたいです