難易度評価

難易度を1〜10段階で評価できます。投票はあとから変更・取り消しできます。

難易度(投票) 未投票 (0票)

投票の分布

まだ投票はありません。

  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.50票
  6. Lv.60票
  7. Lv.70票
  8. Lv.80票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

ログインして難易度を投票

外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

Median Triangulation

作成者 mackerel38

テスター yukimy32

難易度(作成者設定) Lv.7

難易度(投票) 未投票 (0票)

実行時間制限
2 秒
メモリ制限
512 MiB

解説

現在の多角形において、書かれた整数が最小の頂点を選び、その頂点と両隣の頂点からなる三角形を取り除くことを繰り返す貪欲法が正当である。

この操作で選んだ頂点を ii、両隣の頂点を l,rl,r とすると、Ai≤Al,ArA_i\le A_l,A_r なので、取り除く三角形の中央値は min⁡(Al,Ar)\min(A_l,A_r) である。

したがって、頂点を AiA_i の昇順に処理し、各頂点の両隣を双方向リストで管理すればよい。得られた N−2N-2 個の中央値を昇順に並べたものが答えである。

以上より、 O(Nlog⁡N)O(N\log N) でこの問題を解くことができる。

証明

現在の多角形で書かれた整数が最小の頂点を vv とする。任意の三角形分割に対し、vv を端点とする対角線をすべて取り除くように対角線を変更することを考える。

1 回の変更では、頂点 v,x,y,zv,x,y,z からなる四角形の対角線 (v,y)(v,y) を (x,z)(x,z) に変更する。

Ax≤AzA_x\le A_z としてよい。このとき、変更前の 22 つの中央値を昇順に並べると

min⁡(Ax,Ay), min⁡(Ay,Az) \min(A_x,A_y),~\min(A_y,A_z)

であり、変更後は

Ax, med⁡(Ax,Ay,Az) A_x,~\operatorname{med}(A_x,A_y,A_z)

である。ただし、med⁡\operatorname{med} は 33 つの整数の中央値を表す。

AvA_v は最小値なので、変更後の各中央値は変更前の対応する中央値以上である。したがって、全体の数列 BB も辞書順で小さくならない。

この変更を繰り返すことで、vv を端点とする対角線をすべて取り除ける。よって、vv と両隣の頂点からなる三角形を含む最適な三角形分割が存在する。

この三角形の中央値は固定され、残りの多角形の三角形分割は独立に選べる。したがって、残りの多角形でも同様に最小値の頂点を選べばよい。

以上より、この貪欲法で正しい解を得ることができます。

ユーザー解説

ユーザー解説を書く

ユーザー解説はまだありません。