1 条题解

  • 0
    @ 2025-3-15 14:45:43

    注意一下就好了

    #include<cstdio>
    #define N 51
    #define repu(i,x,y) for(i=x;i<=y;i++)
    #define max(a,b) (a>b?a:b)
    int n,m,a[N][N],f[N][N],x=0,s[N*N];
    int dfs(int x,int y,int t) {
        f[x][y]=t; int i,j,k=4,s=1;
        if (!(a[x][y]&1) && y>1 && !f[x][y-1]) s+=dfs(x,y-1,t);
        if (!(a[x][y]&2) && x>1 && !f[x-1][y]) s+=dfs(x-1,y,t);
        if (!(a[x][y]&4) && y<m && !f[x][y+1]) s+=dfs(x,y+1,t);
        if (!(a[x][y]&8) && x<n && !f[x+1][y]) s+=dfs(x+1,y,t);
        return s;
    }
    int main() {
        int i,j,k,l,t,ans=0; scanf("%d%d",&m,&n);
        repu(i,1,n)
            repu(j,1,m)
                scanf("%d",&a[i][j]);
        repu(i,1,n)
            repu(j,1,m)
                if (!f[i][j])
                    ++x,s[x]=dfs(i,j,x),ans=max(ans,s[x]);
        printf("%d\n%d\n",x,ans); ans=0;
        for (j=1;j<=m;j++)
            for (i=n;i>=1;i--) {
                if (f[i][j]!=f[i-1][j])
                    if (s[f[i][j]]+s[f[i-1][j]]>ans)
                        ans=s[f[i][j]]+s[f[i-1][j]],k=i,l=j,t=1;
                if (f[i][j]!=f[i][j+1])
                    if (s[f[i][j]]+s[f[i][j+1]]>ans)
                        ans=s[f[i][j]]+s[f[i][j+1]],k=i,l=j,t=0;
            }
        printf("%d\n%d %d %c\n",ans,k,l,t?'N':'E');
    }
    

    信息

    ID
    24
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    13
    已通过
    3
    上传者