AtCoder

ABC377 B問題(Avoid Rook Attack)を解く

AtCoder_ABC377_B

AtCoder が提供しているABC(AtCoder Beginner Contest)377 B問題をC++とPythonで解いてみました。ABC377は、2024年10月26日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

B問題 Avoid Rook Attack(Difficulty : 50)

問題の詳細は、リンク先をご覧ください。

ABC377 B問題 Avoid Rook Attack

すべてのマスについて、コマが置けるか調べます。AtCoder Problems による Difficulty は 50 でした。

解答案

C++ プログラム例(ABC377B)

縦8マス、横8マスの64マスすべてについて、コマが置けるか調べます。コマが置ける条件は、

そのマスの上下左右にコマが置かれていない

となります。制約が小さいため簡単な実装で間に合います。以下が、C++プログラムです。

#include <bits/stdc++.h>
using namespace std;

int main()
{
	vector<string> s(8);
	for (int i = 0; i < 8; ++i) {
		cin >> s[i];
	}

	int result = 0;
	for (int i = 0; i < 8; ++i) {
		for (int j = 0; j < 8; ++j) {
			bool t = true;
			for (int k = 0; k < 8; ++k) {
				if (s[i][k] == '#') {
					t = false;
				}
				if (s[k][j] == '#') {
					t = false;
				}
			}
			if (t) {
				++result;
			}
		}
	}

	cout << result << endl;

	return 0;
}

AC(Accepted=正しいプログラム)と判定されました。

Python プログラム例(ABC377B)

Python版も基本的な考え方は同じです。以下がプログラムです。

"""AtCoder Beginner Contest 377 B"""
s = [input() for i in range(8)]

result = 0
for i in range(8):
    for j in range(8):
        t = True
        for k in range(8):
            if s[i][k] == '#':
                t = False
            if s[k][j] == '#':
                t = False
        if t:
            result += 1

print(result)

こちらも「AC」と判定されました。

最後に

B問題、C問題、F問題は、チェスのコマを盤に置き配置できる空きマスをカウントする問題でした。

引き続き ABC の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA