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

ABC423C - Lock All Doors

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

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

考え方

ドアを開いたり閉じたりするという問題だが、実は閉じる作業の後に開く作業をする必要はない。
というのは、ドアAを閉めた次にドアBを開くとすれば、先にドアBを開いてからドアAを閉めてもよい。
ドアAを閉めた次にドアAを開くとすれば、その2つは省略してよい。
したがって、最短手順として「必要なだけ開いてから、全てを閉める」の形限定で探してよい貪欲法※が成立する。

さて、必要なだけ開くというのは、以下の条件を両方満たす連続区間を全て開くことである。
  • もともと空いていたドアを全て区間に含む
  • 高橋君の初期位置がその区間内にある
よって、開くドアの最小番号は、「もともと開いていた全てのドアと、高橋君の右にあるドアの中の最小値」である。
また、最大番号は「もともと開いていた全てのドアと、高橋君の左にあるドアの中の最大値」である。

これらの番号を求め、その区間内の閉まっているドアを全て開け、その後区間内を全部閉めればよい。

解答例


注意点


別解

ウィキ募集バナー