#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m, k;
cin >> n >> m >> k;
char a[1005][1005]; // 原矩阵
vector<int> segments; // 每段连续o的数量
// 输入矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
// 对每一列找连续的o
for (int col = 0; col < m; col++) {
int cnt = 0;
for (int row = 0; row < n; row++) {
if (a[row][col] == 'o') {
cnt++;
} else {
if (cnt >= 2) segments.push_back(cnt);
cnt = 0;
}
}
if (cnt >= 2) segments.push_back(cnt); // 列底部也要判断
}
// 得分段:每段长度cnt → 能得 cnt-1 分,但要涂 cnt 个格子
sort(segments.begin(), segments.end(), greater<int>()); // 优先长段
int score = 0, used = 0;
for (int i = 0; i < segments.size(); i++) {
int len = segments[i];
if (used + len <= k) {
used += len;
score += (len - 1);
} else {
int rem = k - used;
if (rem >= 2) score += (rem - 1); // 只用剩下的红格也能得分
break;
}
}
cout << score << endl;
return 0;
}
有点难

京公网安备 11010502036488号