10分求条
查看原帖
10分求条
1593858
metrocoding楼主2025/6/21 21:26
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int n,m,sum = 0;
    cin>>n>>m;
    char arr[n][m];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>arr[i][j];
        }
    }
    int cont[n][m],can_open_based = 0;
    memset(cont,0,sizeof(cont));
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(arr[i][j] == '#') continue;
            if(i == 0 && j == 0)
            {
                if(arr[i][j+1] == '.' && arr[i+1][j] == '.') can_open_based++;
            }
            else if(i != 0 && i != n - 1 && j != 0 && j != m - 1)
            {
                if(arr[i+1][j] == '.' && arr[i][j+1] == '.' && arr[i-1][j] == '.' && arr[i][j-1] == '.') can_open_based++;
            }
            else if(i == 0 && j == m - 1)
            {
                if(arr[i+1][j] == '.' && arr[i][j-1] == '.') can_open_based++;
            }
            else if(i == n - 1 && j == 0)
            {
                if(arr[i][j+1] == '.' && arr[i-1][j] == '.') can_open_based++;
            }
            else if(i == n - 1 && j == m - 1)
            {
                if(arr[i-1][j] == '.' && arr[i][j-1] == '.') can_open_based++;
            }
            else if(i == 0 && j != 0 && j != m - 1)
            {
                if(arr[i][j+1] == '.' && arr[i+1][j] == '.' && arr[i][j-1] == '.') can_open_based++;
            }
            else if(i == n - 1 && j != 0 && j != m - 1)
            {
                if(arr[i][j+1] == '.' && arr[i-1][j] == '.' && arr[i][j-1] == '.') can_open_based++;
            }
            else if(j == 0 && i != n - 1 && i != 0)
            {
                if(arr[i-1][j] == '.' && arr[i+1][j] == '.' && arr[i][j+1] == '.') can_open_based++;
            }
            else if(j == m - 1 && i != 0 && i != n - 1)
            {
                if(arr[i-1][j] == '.' && arr[i+1][j] == '.' && arr[i][j+1] == '.') can_open_based++;
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(arr[i][j] == '#')
            {
                if(i > 0 && i < n - 1 && j > 0 && j < m - 1) cont[i][j] = 4 + 1;
                else if((i == 0 || i == n - 1) && (j == 0 || j == m - 1)) cont[i][j] = 2 + 1;
                else cont[i][j] = 3 + 1;
            }
        }
    }
    int maxn = cont[0][0];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(cont[i][j] > maxn) maxn = cont[i][j];
        }
    }
    cout<<can_open_based + maxn;
    return 0;
}
2025/6/21 21:26
加载中...