记录编号 |
580781 |
评测结果 |
AAAAAAAA |
题目名称 |
城堡 |
最终得分 |
100 |
用户昵称 |
┭┮﹏┭┮ |
是否通过 |
通过 |
代码语言 |
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;
}