ABC300C - Cross

解法1

考え方

サイズ1のバツの中心をメモしておく.その後,それぞれの中心に対し,サイズがどれだけか調べる.

回答例

H, W = map(int, input().split())
C = [list(input()) for _ in range(H)]
N = min(H, W)
ans = [0] * N

center = []
for i in range(1, H - 1):
    for j in range(1, W - 1):
        if (C[i - 1][j - 1] == '#' 
            and C[i - 1][j + 1] == '#' 
            and C[i][j] == '#' 
            and C[i + 1][j - 1] == '#' 
            and C[i + 1][j + 1] == '#'):
            center.append((i, j))

for i, j in center:
    size = 0
    while True:
        if i > 0 and j > 0 and C[i - 1][j - 1] == '#':
            size += 1
            i -= 1
            j -= 1
        else:
            break
    ans[size - 1] += 1

print(*ans)


解法2:深さ優先探索