差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン両方とも次のリビジョン
programming_algorithm:contest_history:atcoder:2020:0314_panasonic2020 [2020/03/16] – [解法] ikatakosprogramming_algorithm:contest_history:atcoder:2020:0314_panasonic2020 [2020/03/16] – [解法] ikatakos
行 289: 行 289:
         ■■■  ...  ■■■         ■■■  ...  ■■■
  
-、迂回するとき、上側を迂回するとして $s→p→q→t$ と通ればよい。+■は同じ大きのものが同じ高さに並ぶことはあり得るが数マスだけ上下にズレたりとかはない。 
 +迂回するとき、上側を迂回するとして $s→p→q→t$ と通ればよい。
  
 ここで、$p,q$ の属する行は、この範囲においては必ず全て白マスである。(黒マスがあったとしたら、それはより大きな■であり、迂回の必要がある最も大きい■に矛盾) ここで、$p,q$ の属する行は、この範囲においては必ず全て白マスである。(黒マスがあったとしたら、それはより大きな■であり、迂回の必要がある最も大きい■に矛盾)
行 296: 行 297:
 $s→p$ は最短で行けるか? $s→p$ は最短で行けるか?
  
-これ行けないとると、以下のような感じで $s-p$ 間をナナメに遮る黒マスがあるということになるが、作り方からしてそれはあり得ないので、最短で行ける。$q→t$ も同様。+まず、$p$ の属する縦列もの範囲では白マスである(1つの■の塊の周囲は必ず白マス)。よって、$s$ から上と右に移動を繰り返して、$p$ と同じ行または列に来たら、後は最短距離で行ける。 
 + 
 +その道中まではどうかというと、「上にも右にも進めない」状態にならない限り、どちらかには進める。そしてどちらかに進み続ければいつかは $p$ 同じ行または列に行け。 
 + 
 +上にも右にも進めない状態、しかもそれが $s$ からの移動で回避できない状態、以下のような感じで $s-p$ 間をナナメに遮る黒マスがあるということになるが、作り方からしてそれはあり得ない。よって $s→p$ は最短で行ける。$q→t$ も同様。
  
          p          p
行 305: 行 310:
 よって、最も大きい■を縦か横のいずれか一方に迂回する必要性だけ考えれば残りは最短で行ける。 よって、最も大きい■を縦か横のいずれか一方に迂回する必要性だけ考えれば残りは最短で行ける。
  
-=== 迂回距離を求める ===+=== 迂回すべき■のサイズ・迂回距離を求める ===
  
 迂回する方向を縦に決め打ちし、横は最短距離とする(縦横反転して2通り試して大きい方を答えとする)。 迂回する方向を縦に決め打ちし、横は最短距離とする(縦横反転して2通り試して大きい方を答えとする)。
programming_algorithm/contest_history/atcoder/2020/0314_panasonic2020.txt · 最終更新: 2020/03/16 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0