1 条题解

  • 0
    @ 2025-9-6 13:38:22

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
     
    const int maxn=1e3+5;
    int a[maxn][maxn];
    int dx[]= {-1,0,1,0};
    int dy[]= {0,1,0,-1};
    int n,m,ans;
     
    bool check(int x, int y) {
        for(int i=0; i<4; i++) {
            int tx=x+dx[i],ty=y+dy[i];
            if(tx<1 || tx>n || ty<1 || ty>m) continue;
            if(a[tx][ty]==1) return false;
        }
        return true;
    }
     
    int main() {
        cin>>n>>m;
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=m; j++) {
                char c;
                cin>>c;
                if(c=='#') a[i][j]=1;
            }
        }
     
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=m; j++) {
                if(a[i][j]==0 && check(i,j)) ans++;
            }
        }
     
        int res=0;
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=m; j++) {
                int cnt=0;
                if(a[i][j]==1) {
                    a[i][j]=0;
                    if(check(i,j)) cnt++;
                    for(int k=0; k<4; k++) {
                        int tx=i+dx[k], ty=j+dy[k];
                        if(tx<1 || tx>n || ty<1 || ty>m) continue;
                        if(a[tx][ty]==0 && check(tx,ty)) cnt++;
                    }
                    a[i][j]=1;
                }
                res=max(res,cnt);
            }
        }
     
        cout<<ans+res<<endl;
     
        return 0;
    }
     
    /*
    in:
    3 5
    .....
    .#..#
    .....
    out:
    11
    */
    
    • 1

    信息

    ID
    5522
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者