记录编号 580781 评测结果 AAAAAAAA
题目名称 城堡 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 C++ 运行时间 0.047 s
提交时间 2023-07-26 15:52:03 内存使用 0.72 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
//1西 2北 4东 8南 
int xx[10],yy[10];
int n,m,ans,s,ss,xx1,yy1,u;
char aa;
int v[110][110];
bool w[110][110];
void init(){
    xx[1] = 0,xx[2] = -1,xx[4] = 0,xx[8] = 1;
    yy[1] = -1,yy[2] = 0,yy[4] = 1,yy[8] = 0;
    scanf("%d%d",&m,&n);
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= m;j++){
            int x;
            scanf("%d",&x);
            v[2*i][2*j] = 1;
            while(x){
                int z = x & (-x);
                v[2*i+xx[z]][2*j+yy[z]] = 2;
                x &= (x-1);
            }
            v[2*i-1][2*j-1] = 3;v[2*i+1][2*j-1] = 3;v[2*i-1][2*j+1] = 3;v[2*i+1][2*j+1] = 3;
        }
    }
}
void dfs(int x,int y){
    if(v[x][y] == 2 || v[x][y] == 3 || w[x][y])return;
    if(v[x][y] == 1)s++;
    w[x][y] = 1;
    dfs(x+1,y);dfs(x-1,y);dfs(x,y-1);dfs(x,y+1);
}
void chan(){
    memset(w,0,sizeof(w));
    for(int j = 2;j <= 2*m;j++){
        for(int i = 2*n;i >= 2;i--){
            if(v[i][j] == 2){
                v[i][j] = 0;s = 0;
                dfs(i,j);
                if(s > u){
                    u = s;
                    if(v[i+1][j] == 1)xx1 = i+1,yy1 = j,aa = 'N';
                    else if(v[i][j-1] == 1)xx1 = i,yy1 = j-1,aa = 'E';
                }
                //if()
                v[i][j] = 2;
                memset(w,0,sizeof(w));
            }
        }
    }
    return;
}
int main(){
    freopen("castle.in","r",stdin);
    freopen("castle.out","w",stdout);
    init();
//    for(int i = 1;i <= 2*n+1;i++){
//        for(int j = 1;j <= 2 * m+1;j++){
//            cout<<v[i][j]<<' ';
//        } 
//        cout<<endl;
//    } 
    for(int i = 1;i <= 2 * n;i++){
        for(int j = 1;j <= 2 * m;j++){
            s = 0;
            if(v[i][j] == 1 && !w[i][j]){
                ss++;dfs(i,j);
            }
            ans = max(ans,s);
        }
    }
    printf("%d\n%d\n",ss,ans);
    chan();
    printf("%d\n%d %d %c\n",u,xx1/2,yy1/2,aa);
    
    return 0;
}