Official
G - 隣り合うマス / adjacent cells Editorial
by
G - 隣り合うマス / adjacent cells Editorial
by
kyopro_friends
「数 \(x\) が書かれたマスと数 \(y\) が書かれたマスは隣り合っているか?」を \((x,y)\) それぞれについて調べると、\(\Omega((HW)^2)\) 時間かかってしまい TLE します。隣り合っているマスの組合せを直接調べましょう。
それぞれのマスは上下左右の最大 \(4\) つのマスに隣接しています。これらを全て調べ、\(x<y\) の条件・重複・出力順に注意することで問題を解くことができます。計算量は \(O(HW\log HW)\) です。
実際には、それぞれのマスについて、右と下のマスのみを調べることで、重複なく隣り合うマスの組を調べることができます
実装例(Python)
H,W=map(int,input().split())
A=[list(map(int,input().split())) for _ in range(H)]
ans=[]
for i in range(H):
for j in range(W):
if i+1<H:
x=min(A[i][j],A[i+1][j])
y=max(A[i][j],A[i+1][j])
ans.append((x,y))
if j+1<W:
x=min(A[i][j],A[i][j+1])
y=max(A[i][j],A[i][j+1])
ans.append((x,y))
ans.sort()
for p in ans:
print(*p)
posted:
last update:
