差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
programming_algorithm:grid [2020/08/06] ikatakosprogramming_algorithm:grid [2020/08/12] (現在) – [位置合わせ] ikatakos
行 1: 行 1:
 ====== グリッド ====== ====== グリッド ======
  
-競技プログラミングでは、2次元をグリッド上に区切ったマス目何かをした結果を求めいう問題がある。+2次元をグリッド上に区切ったマス目を、下左右ナナメなど順番に処理すとがある。
  
 +その際、indexに混乱しないようにメモ。
 ===== 上下左右への探索 ===== ===== 上下左右への探索 =====
  
行 134: 行 135:
       3 □ □ ❸ □ □       3 □ □ ❸ □ □
  
-2つずつの比較でなく、任意の2列を比較できるよう全体として共通のオフセットを持たせておきたい場合は、+2つずつの比較でなく、任意の2列を比較できるよう全体として共通のオフセットを持たせておきたい場合は、配列の長さを $\max(H,W)$ とした上で
  
   * 「\」方向は、左上のマスを $(i,j)$ とすると、indexは $\dfrac{i+j}{2}$(切り捨て)より開始   * 「\」方向は、左上のマスを $(i,j)$ とすると、indexは $\dfrac{i+j}{2}$(切り捨て)より開始
行 144: 行 145:
 「上下左右への探索」で紹介したのと同様に、1次元で配列を持ちたい場合。 「上下左右への探索」で紹介したのと同様に、1次元で配列を持ちたい場合。
  
-ただし、外壁作っていない(外壁を含めて全体をイテレートするとする。+ただし、外壁作っている場合でも、外壁を含めて全体をイテレートするとする。
  
-統一的に書くのは難しいので、↘方向と↙方向、それぞれ2回に分けて書くとする+統一的に書くのは難しいので、↘方向と↙方向、それぞれ2回に分けて書く。
  
 <sxh python> <sxh python>
行 161: 行 162:
     si = k     si = k
     ti = si + min(h, k + 1) * (w - 1)     ti = si + min(h, k + 1) * (w - 1)
-    diag = [] 
     for i in range(si, ti, w - 1):     for i in range(si, ti, w - 1):
-        diag.append(i) +        pass
-    print(diag)+
  
 # ↙方向、最右列開始 # ↙方向、最右列開始
行 170: 行 169:
     si = w - 1 + k * w     si = w - 1 + k * w
     ti = si + min(w, h - k) * (w - 1)     ti = si + min(w, h - k) * (w - 1)
-    diag = [] 
     for i in range(si, ti, w - 1):     for i in range(si, ti, w - 1):
-        diag.append(i) +        pass
-    print(diag)+
  
 # ↘方向、最上段開始 # ↘方向、最上段開始
-for k in range(-1, 1): +for k in range(w 1, -1, -1): 
-    si = -+    si = k 
-    ti = si + min(h, k + w) * (w + 1) +    ti = si + min(h, w - k) * (w + 1)
-    diag = []+
     for i in range(si, ti, w + 1):     for i in range(si, ti, w + 1):
-        diag.append(i) +        pass
-    print(diag)+
  
 # ↘方向、最左列開始 # ↘方向、最左列開始
行 188: 行 183:
     si = k * w     si = k * w
     ti = si + min(w, h - k) * (w + 1)     ti = si + min(w, h - k) * (w + 1)
-    diag = [] 
     for i in range(si, ti, w + 1):     for i in range(si, ti, w + 1):
-        diag.append(i) +        pass
-    print(diag)+
  
 # [0] # [0]
行 212: 行 205:
 # [18] # [18]
 </sxh> </sxh>
 +
 +
  
programming_algorithm/grid.txt · 最終更新: 2020/08/12 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0