1 solutions

  • 0
    @ 2025-9-1 17:09:09
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010;
    char a[N][N];
    int x[N][N];
    int dx[5]={0,0,-1,1,0},dy[5]={-1,1,0,0,0};
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                cin>>a[i][j];
            }
        }
        int res=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                int cnt=0;
                for(int k=0;k<4;k++)
                {
                    if(a[i+dx[k]][j+dy[k]]=='#')
                    {
                        cnt++;
                    }
                }
                if(a[i][j]=='.'&&cnt==0)
                {
                    res++;
                }
                x[i][j]=cnt;
            }
        }
        //cout<<res<<endl;
        int maxv=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(a[i][j]=='.')
                {
                    continue;
                }
                else
                {
                	int c=0;
                    for(int k=0;k<4;k++)
                    {
    					//判断这个相邻位置是可以被开荒 
    					int xx=i+dx[k],yy=j+dy[k];
    					if(x[xx][yy]==1&&a[xx][yy]=='.')
    					{
    						c++;
    					}
                    }
                    if(a[i][j]=='#'&&x[i][j]==0)
                    {
                    	c++;
    				}
    				maxv=max(maxv,c); 
                }
            }
        }
        cout<<res+maxv;
        return 0;
    }
    

    Information

    ID
    2565
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    15
    Accepted
    1
    Uploaded By