Official

B - Visibility Editorial by QCFium


マス \((X, Y)\) から上下左右各方向について、マス目の外に出るか障害物の置かれているマスに到達するまでのマス目の数を数えればよいです。

解答例 (C++)
この解答例では \(4\) 方向数える際にマス \((X, Y)\) を各 \(1\) 回、合計 \(4\) 回数えてしまう実装になっているので、初期値を \(-3\) にして結果的に \(1\) 回だけ数えるようにしています。

#include <bits/stdc++.h>

int ri() {
	int n;
	scanf("%d", &n);
	return n;
}

int main() {
	int h = ri();
	int w = ri();
	int x = ri() - 1;
	int y = ri() - 1;
	std::string s[h];
	for (auto &i : s) std::cin >> i;
	
	int cnt = -3;
	for (int i = x; i < h && s[i][y] != '#'; i++) cnt++;
	for (int i = x; i >= 0 && s[i][y] != '#'; i--) cnt++;
	for (int j = y; j < w && s[x][j] != '#'; j++) cnt++;
	for (int j = y; j >= 0 && s[x][j] != '#'; j--) cnt++;
	printf("%d\n", cnt);
	return 0;
}

posted:
last update: