题解

1 条题解

  • 1
    @ 2022-08-17 19:34:35
    #include<bits/stdc++.h>
    using namespace std;
    char a[105][105];
    int b[105][105];
    int n,m,cnt,ans1=0,ans2=0;
    int max1=0,max2=0,min1=0,min2=0;
    void dfs(int x,int y)
    {
        cnt++;
        max1=max(max1,x),max2=max(max2,y),min1=min(min1,x),min2=min(min2,y);
        if(!b[x-1][y]&&x-1>0&&a[x-1][y]=='#')
        {
            b[x-1][y]=1;
            dfs(x-1,y);
        }
        if(!b[x][y-1]&&y-1>0&&a[x][y-1]=='#')
        {
            b[x][y-1]=1;
            dfs(x,y-1);
        }
        if(!b[x+1][y]&&x+1<=n&&a[x+1][y]=='#')
        {
            b[x+1][y]=1;
            dfs(x+1,y);
        }
        if(!b[x][y+1]&&y+1<=m&&a[x][y+1]=='#')
        {
            b[x][y+1]=1;
            dfs(x,y+1);
        }
    }
    int main()
    {
        std::ios::sync_with_stdio(0);
        std::cin.tie(0);
        std::cout.tie(0);
        cin>>n>>m;
        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++)
                cin>>a[i][j];
        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++)
            {
                cnt=max1=max2=0;
                min1=n+1;
                min2=m+1;
                if(b[i][j]==0&&a[i][j]=='#')
                {
                    b[i][j]=1;
                    dfs(i,j);
                    if(cnt==(max1-min1+1)*(max2-min2+1))
                        ans1++;
                    else
                        ans2++;
                }
            }
        cout<<ans1<<endl<<ans2<<endl;
        return 0;
    }
    
  • 1

信息

ID
1265
难度
7
分类
(无)
标签
递交数
3
已通过
1
通过率
33%
上传者