不知道为什么只得了30分
#include <bits/stdc++.h>
using namespace std;
int a[1001][1001];
char b[1001][1001];
int main () {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> b[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (b[i][j] == '#')
{
/*if (i != 0 && i != n - 1 && j != 0 && j != m - 1)
{
a[i][j] = 4;
}
else if ((i == 0 || i == n - 1) && (j != 0 || j != m - 1))
{
a[i][j] = 3;
}
else if ((j == 0 || j == m - 1) && (i != 0 || i != n - 1))
{
a[i][j] = 3;
}
else
{
a[i][j] = 2;
}*/
if(i == 0)
{
if((j == 0) || (j == m -1))
{
a[i][j] = 2;
}
else
{
a[i][j] = 3;
}
}
else if(i == n - 1)
{
if((j == 0) || (j == m - 1))
{
a[i][j] = 2;
}
else
{
a[i][j] = 3;
}
}
else
{
if((j ==0) || (j == m - 1))
{
a[i][j] = 3;
}
else
{
a[i][j] = 4;
}
}
}
else
{
a[i][j] = 1;
}
}
}
int sum = 0;
int flag = a[0][0];
int x, y;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (a[i][j] > flag) {
flag = a[i][j];
x = i;
y = j;
}
}
}
a[x][y] = 1;
// debug
/*for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << a[i][j];
}
cout << endl;
}*/
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (a[i][j] == 4)
{
a[i][j] = 0;
a[i][j - 1] = 0;
a[i - 1][j] = 0;
// 未处理的要注意,可能不是1,如果不是1,是不能置0的
if(a[i][j + 1] == 1)
{
a[i][j + 1] = 0;
}
if(a[i + 1][j] == 1)
{
a[i + 1][j] = 0;
}
}
else if (a[i][j] == 3)
{
// 分别讨论在什么位置
/*a[i][j] = 0;
a[i][j - 1] = 0;
a[i][j + 1] = 0;
a[i + 1][j] = 0;
a[i - 1][j] = 0;*/
if(i == 0)
{
a[i][j] = 0;
a[i][j - 1] = 0;
// 未处理的要注意,可能不是1,如果不是1,是不能置0的
if(a[i][j + 1] == 1)
{
a[i][j + 1] = 0;
}
if(a[i + 1][j] == 1)
{
a[i + 1][j] = 0;
}
}
else if(i == n - 1)
{
a[i][j] = 0;
a[i][j - 1] = 0;
a[i - 1][j] = 0;
// 未处理的要注意,可能不是1,如果不是1,是不能置0的
if(a[i][j + 1] == 1)
{
a[i][j + 1] = 0;
}
}
else if(j == 0)
{
a[i][j] = 0;
a[i - 1][j] = 0;
// 未处理的要注意,可能不是1,如果不是1,是不能置0的
if(a[i + 1][j] == 1)
{
a[i + 1][j] = 0;
}
if(a[i][j + 1] == 1)
{
a[i][j + 1] = 0;
}
}
else if(j == m - 1)
{
a[i][j] = 0;
a[i - 1][j] = 0;
a[i][j - 1] = 0;
// 未处理的要注意,可能不是1,如果不是1,是不能置0的
if(a[i + 1][j] == 1)
{
a[i + 1][j] = 0;
}
}
}
else if (a[i][j] == 2)
{
// 分别讨论在什么位置
/*a[i][j] = 0;
a[i][j - 1] = 0;
a[i][j + 1] = 0;
a[i + 1][j] = 0;
a[i - 1][j] = 0;*/
if((i == 0) && (j == 0))
{
a[i][j] = 0;
// 未处理的要注意,可能不是1,如果不是1,是不能置0的
if(a[i][j + 1] == 1)
{
a[i][j + 1] = 0;
}
if(a[i + 1][j] == 1)
{
a[i + 1][j] = 0;
}
}
if((i == 0) && (j == m - 1))
{
a[i][j] = 0;
a[i][j - 1] = 0;
// 未处理的要注意,可能不是1,如果不是1,是不能置0的
if(a[i + 1][j] == 1)
{
a[i + 1][j] = 0;
}
}
if((i == n - 1) && (j == 0))
{
a[i][j] = 0;
a[i - 1][j] = 0;
// 未处理的要注意,可能不是1,如果不是1,是不能置0的
if(a[i][j + 1] == 1)
{
a[i][j + 1] = 0;
}
}
if((i == n - 1) && (j == m - 1))
{
a[i][j] = 0;
a[i][j - 1] = 0;
a[i - 1][j] = 0;
}
}
}
}
// debug
/*cout << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << a[i][j];
}
cout << endl;
}*/
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
sum += a[i][j];
//cout << a[i][j];
}
//cout <<endl;
}
cout << sum << endl;
return 0;
}