アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC448F - Authentic Traveling Salesman Problem

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

B以下レベルの内容は省略

考え方

Moアルゴリズム※は、複数の区間クエリを並べ替え、隣り合うクエリ間で処理中の区間の移動量を小さくすることで高速化するアルゴリズム。
今回はその移動を決めるアルゴリズムがそのまま使える。
すなわち、領域の横幅をM等分し、1番目を上から、2番目を下から、3番目を上から、……、と回収していけばよい。

このときの移動時間の合計の最悪値は領域を一辺Lとして、
  • 縦方向の移動がML秒
  • 横方向の点の間の移動がNL/M秒
  • 隣の領域に移動する分L秒
  • スタート地点に帰ってくる分L秒(Mが偶数の場合)
の合計である。
これは相加平均と相乗平均の大小関係よりMが√Nのときに最小値2L√N+2L秒となる。
今回の制約ではこれはおよそ9.84*10^9となり、ぎりぎり制限範囲内となる。

もちろんこれではスタート地点が1にならない場合もあるが、巡回路なので先頭が1になるように順送りすればいいだけである。

解答例


注意点


別解

最近更新されたスレッド
ウィキ募集バナー