10pts,求助! -_-,悬赏一关注!
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+5;
char a[N][N];
int mp[N][N],n,m;
int ans = 0;
int dx[] = {1,0,-1,0};
int dy[] = {0,1,0,-1};
int main(){
memset(mp,0,sizeof(mp));
cin>>n>>m;
int cnt = 0;
vector<pair<int,int> > pos;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=m;j++){
cin>>a[i][j];
if(a[i][j] == '#'){
pos.push_back(make_pair(i,j));
mp[i][j]++;
cnt++;
for(int k = 0;k<4;k++){
int nx = i+dx[k];
int ny = j+dy[k];
mp[nx][ny]++;
if(mp[nx][ny] == 1 && nx>=1 && nx<=n && ny>=1 && ny<=m) cnt++;;
}
}
}
}
int c = cnt;
for(int i = 0;i<pos.size();i++){
cnt = c;
int x = pos[i].first;
int y = pos[i].second;
cnt--;
for(int j = 0;j<4;j++){
int nx = x+dx[j];
int ny = y+dy[j];
if(mp[nx][ny]-1 == 0 &&
nx>=1 && nx<=n &&
ny>=1 && ny<=m) cnt--;
}
ans = max(ans,n*m-cnt);
}
cout<<ans<<endl;
return 0;
}