1 条题解

  • 0
    @ 2026-1-28 14:47:48
    #include <bits/stdc++.h>
    using namespace std;
    // [1] crr:存储原始网格(.表示荒地,#表示杂物);arr:存储每个位置周围(含自身)的杂物数量
    char crr[1100][1100];
    int  arr[1100][1100]={};
    
    int main(){
        int n,m; // [2] n:网格行数,m:网格列数
        cin>>n>>m; // [3] 读取网格的行数和列数
        // [4] 读取n行m列的网格数据,存入crr数组
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                cin>>crr[i][j];
    
        int sum=0; // [5] sum:统计初始状态下可直接开垦的荒地数量(周围无杂物的荒地)
        // [6] 遍历每个位置,计算其周围(含自身)的杂物数量
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                // 检查当前位置是否为杂物
                if(crr[i][j]=='#') arr[i][j]++;
                // 检查上方位置是否为杂物
                if(i>0 && crr[i-1][j]=='#' ) arr[i][j]++;
                // 检查下方位置是否为杂物
                if(i<n-1 && crr[i+1][j]=='#' ) arr[i][j]++;
                // 检查左方位置是否为杂物
                if(j>0 && crr[i][j-1]=='#' ) arr[i][j]++;
                // 检查右方位置是否为杂物
                if(j<m-1 && crr[i][j+1]=='#' ) arr[i][j]++;
                // 若当前位置周围无杂物,说明是可开垦荒地,计数加1
                if(arr[i][j]==0) sum++;
            }
        }
    
        int max=0; // [7] max:记录清除单个杂物后,最多能新增的可开垦荒地数量
        // [8] 遍历所有杂物位置,计算清除该杂物后新增的可开垦荒地数
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(crr[i][j]=='#'){ // 仅处理杂物位置
                    int sum2=0; // sum2:清除当前杂物后新增的可开垦荒地数
                    // 检查上方位置,若原本周围只有当前一个杂物,清除后该位置可开垦
                    if(i>0 	 &&  arr[i-1][j]==1) sum2++;
                    // 检查下方位置
                    if(i<n-1 &&  arr[i+1][j]==1) sum2++;
                    // 检查左方位置
                    if(j>0 	 &&  arr[i][j-1]==1) sum2++;
                    // 检查右方位置
                    if(j<m-1 &&  arr[i][j+1]==1) sum2++;
                    // 检查当前杂物位置本身,若清除后周围无其他杂物,该位置可开垦
                    if(arr[i][j]==1) sum2++;
                    // 更新最大新增数量
                    max=(max >sum2 ? max :sum2);
                }
            }
        }
    
        // [9] 输出最终可开垦的荒地总数:初始可开垦数 + 清除单个杂物最多新增的数量
        cout<<max+sum;
        return 0;
    }
    
    • 1

    信息

    ID
    948
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者