P3654 First Step (ファーストステップ)

胖柚の工作室發表於2024-04-04

題目連結:

本題資料範圍僅為 \(100\),因此可以暴力列舉 \(O(n^3)\),唯一需要注意的一點就是\(k=1\) 時,橫著站和豎著站是一樣的,答案被計算了兩次,因此最終的 \(\rm ans\) 需要再除以 \(2\)

#include <bits/stdc++.h>

const int N = 110;
char w[N][N];
int R, C, K, ans;
bool flag = true;

int main()
{
	std::cin >> R >> C >> K;
	for (int i = 0; i < R; i++) {
		for (int j = 0; j < C; j++) {
			std::cin >> w[i][j];
		}
	}
	for (int i = 0; i < R; i++) {
		for (int j = 0; j <= C - K; j++) {
			int z = j + K - 1;
			flag = true;
			for (int k = j; k <= z; k++) {
				if (w[i][k] == '#') flag = false; 
			}
			if (flag) ans++;
		}
	}
	for (int j = 0; j < C; j++) {
		for (int i = 0; i <= R - K; i++) {
			int z = i + K - 1;
			flag = true;
			for (int k = i; k <= z; k++) {
				if (w[k][j] == '#') flag = false;
			}
			if (flag) ans++;
		}
	}
	if (K == 1) ans /= 2;
	std::cout << ans;
	return 0;
}

相關文章