ํ์ด
- ๋ชจ๋ ํ๊ณผ ์ด์ ๋ํด ํ์์ด ์งํ๋๋ค
- ๋์ด๊ฐ 2์ด์์ผ๋ก ๋ณํํ๊ฒ ๋๋ฉด ํ์์ ์ค๋จํ๋ค
- ๊ฒฝ์ฌ๋ก๋ ๋ฎ์ ์นธ์ ๋์์ผ ํ๋ฏ๋ก ํ์์ ์งํํ๋ค 1์นธ ๋์ ์นธ์ ๋ง๋๊ฒ ๋๋ฉด ๋ค๋ก ํ์งํด์ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ์ ์๋์ง ํ์ธ(back ํจ์), 1์นธ ๋ฎ์ ์นธ์ ๋ง๋๊ฒ ๋๋ฉด ์์ผ๋ก ๋์๊ฐ๋ฉด์ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ์ ์๋์ง ํ์ธ(fore ํจ์)
- ๊ฒฝ์ฌ๋ก๋ ๊ฒน์น๊ฒ ๋ ์ ์์ผ๋ฏ๋ก ramp ๋ฅผ ํตํด ํ์ฌ ์นธ์ ๊ฒฝ์ฌ๋ก๊ฐ ๋์ฌ์๋์ง ํ์ธ
import sys
input =sys.stdin.readline
def fore(row, s, n, ramp):
for t in range(L):
next = s+t
if next>=N:
return False
if row[next] != n or ramp[next]:
return False
ramp[next] = True
return True
def back(row, s, n, ramp):
for t in range(1, L+1):
prev = s-t
if prev<0:
return False
if row[prev] != n or ramp[prev]:
return False
ramp[prev] = True
return True
def main(arr):
global ans
for row in arr:
t, next = row[0], 1
ramp = [False]*N
while next < N:
if t == row[next]:
next += 1
continue
gap = t-row[next]
if gap > 1 or gap < -1:
break
if gap == -1:
if not back(row, next, t, ramp):
break
elif gap == 1:
if not fore(row, next, t-1, ramp):
break
next += (L-1)
t = row[next]
else:
ans += 1
N, L = map(int, input().split())
MAP = [list(map(int, input().split())) for _ in range(N)]
ROTATE_MAP = list(map(list, zip(*MAP)))
ans = 0
main(MAP)
main(ROTATE_MAP)
print(ans)