代码:
#include<bits/stdc++.h>
using namespace std;
long long n, m;
char a[10005][10005];
long long maxz = 0, maxi = 1, maxj = 1, w = 0;
bool kai_ken(int i, int j){
// if(i == 3 && j == 9)
// cout << a[i + 1][j] << " ";
// cout << a[4][2] << " ";
// cout << i + 2 << " ";
w = 0;
if(a[i + 1][j] == '.' && i + 1 <= n && j + 1 <= m + 1 && j - 1 >= 0){
if(a[i + 2][j] == '.' && a[i][j + 1] == '.' && a[i][j - 1] == '.'){
w++;
}
}
if(a[i - 1][j] == '.' && i - 1 >= 1 && j + 1 <= m + 1 && j - 1 >= 0){
if(a[i - 2][j] == '.' && a[i][j + 1] == '.' && a[i][j - 1] == '.'){
// cout << 2 << " ";
w++;
}
}
if(a[i][j + 1] == '.' && j + 1 <= m && i - 1 >= 0 && i + 1 <= n + 1){
if(a[i + 1][j] == '.' && a[i - 1][j] == '.' && a[i][j + 2] == '.'){
// cout << 3 << " ";
w++;
}
}
if(a[i][j - 1] == '.' && j - 1 >= 1 && i - 1 >= 0 && i + 1 <= n + 1){
if(a[i + 1][j] == '.' && a[i - 1][j] == '.' && a[i][j - 2] == '.'){
// cout << 4 << " ";
w++;
}
}
// cout << w << " ";
if(w == 4){
maxi = i;
maxj = j;
return 1;
}
if(w > maxz){
maxz = w;
maxi = i;
maxj = j;
}
return 0;
}
int main(){
cin >> n >> m;
long long s = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> a[i][j];
if(i == 1)
a[i - 1][j] = '.';
if(i == n)
a[i + 1][j] = '.';
if(j == 1)
a[i][j - 1] = '.';
if(j == m)
a[i][j + 1] = '.';
}
}
// if(i == 1 && j == 1){
//
// }
bool flag = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(a[i][j] == '#'){
if(kai_ken(i, j) == 1){
flag = 1;
break;
}
}
}
if(flag)
break;
}
// cout << a[4][2] << " ";
a[maxi][maxj] = '.';
// cout << maxi << " " << maxj << " ";
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(a[i + 1][j] == '.' && a[i - 1][j] == '.' && a[i][j + 1] == '.' && a[i][j - 1] == '.' && a[i][j] != '#'){
// cout << i << " " << j << "\n";
s++;
}
}
}
// for(int i = 1; i <= n; i++){
// cout << a[i][m + 1] << " ";
// }
cout << s;
return 0;
}