問題概要
問題ページ
-
B - Visibility
問題ページへ移動する
問題文
縦 \(H\) 行、横 \(W\) 列のマス目があり、いくつかのマスには障害物が置かれています。
上から \(i\) 番目、左から \(j\) 番目のマスをマス \((i, j)\) と表すことにします。
\(H\) 個の文字列 \(S_1, S_2, S_3, \dots, S_H\) が与えられます。\(S_i\) の \(j\) 文字目はマス \((i, j)\) の状態を表し、#
なら障害物が置かれていることを、.
なら障害物が置かれていないことを表します。
このマス目上のあるマスからあるマスが見えるとは、\(2\) つのマスが同じ行または列にあり、\(2\) つのマスの間 (\(2\) つのマス自身を含む) に障害物が \(1\) つも置かれていないことを意味します。
このマス目上のマスであって、マス目 \((X, Y)\) から見えるもの (マス \((X, Y)\) 自身を含む) の数を求めてください。
制約
- \(1 \le H \le 100\)
- \(1 \le W \le 100\)
- \(1 \le X \le H\)
- \(1 \le Y \le W\)
- \(S_i\) は
.
および#
のみからなる長さ \(W\) の文字列 - マス \((X, Y)\) に障害物は置かれていない
問題の考察
ACコード
import sys
def solve():
input = sys.stdin.readline
mod = 10 ** 9 + 7
h, w, x, y = list(map(int, input().rstrip('\n').split()))
s = [list(str(input().rstrip('\n'))) for _ in range(h)]
cnt = 0
for i in range(x - 1, -1, -1):
if s[i][y-1] == ".":
cnt += 1
else:
break
for i in range(x - 1, h):
if s[i][y-1] == ".":
cnt += 1
else:
break
for i in range(y - 1, -1, -1):
if s[x-1][i] == ".":
cnt += 1
else:
break
for i in range(y - 1, w):
if s[x-1][i] == ".":
cnt += 1
else:
break
print(cnt - 3)
if __name__ == '__main__':
solve()