Author: loop3r
Date: 20260224
tag: 枚举
link: https://www.luogu.com.cn/problem/P3654问题描述
分析
横向处理:对于每一行,统计连续的 . 的长度,如果长度
纵向处理:对于每一列,统计连续的 . 的长度,如果长度
注意:当
参考代码
cpp
#include <bits/stdc++.h>
using namespace std;
int n, m, k;
char g[105][105];
int main() {
cin >> n >> m >> k;
for (int i = 0; i < n; i++) cin >> g[i];
int ans = 0;
// 横向
for (int i = 0; i < n; i++) {
int len = 0;
for (int j = 0; j < m; j++) {
if (g[i][j] == '.') {
len++;
} else {
if (len >= k) ans += len - k + 1;
len = 0;
}
}
if (len >= k) ans += len - k + 1;
}
// 纵向
if (k > 1) { // 避免 k=1 重复
for (int j = 0; j < m; j++) {
int len = 0;
for (int i = 0; i < n; i++) {
if (g[i][j] == '.') {
len++;
} else {
if (len >= k) ans += len - k + 1;
len = 0;
}
}
if (len >= k) ans += len - k + 1;
}
}
cout << ans << endl;
return 0;
}