10pts,求助! -_-,悬赏一关注!
查看原帖
10pts,求助! -_-,悬赏一关注!
1675823
Raymond88楼主2025/6/27 18:32

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;
}
2025/6/27 18:32
加载中...