记录编号 |
313067 |
评测结果 |
AAAAAAAA |
题目名称 |
城堡 |
最终得分 |
100 |
用户昵称 |
open the window |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.025 s |
提交时间 |
2016-09-28 10:00:58 |
内存使用 |
0.61 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int dx[4]={-1,1,0,0},
dy[4]={0,0,-1,1};
char dz[4]={'N','S','W','E'};
int a[101][101][4],q[5001][3],c[101][101],d[101][101];
int ror,n,m,tot,tx,ty,maxx=-10000,maxs=-10000;
bool b[101][101];
char tz;
void up(int x,int y)
{
tot++;
b[x][y]=true;
int tail=1,head=0,xx,yy;
q[1][1]=x; q[1][2]=y;
while (head<tail)
{
head++;
for (int i=0; i<4; ++i)
{
xx=q[head][1]+dx[i];
yy=q[head][2]+dy[i];
if (xx>0 && xx<=n && yy>0 && yy<=m && !b[xx][yy] && a[q[head][1]][q[head][2]][i]==0)
{
tail++;
b[xx][yy]=true;
q[tail][1]=xx;
q[tail][2]=yy;
}
}
}
for (int j=1; j<=tail; ++j)
{
c[q[j][1]][q[j][2]]=tail;
d[q[j][1]][q[j][2]]=tot;
}
if (tail>maxx) maxx=tail;
}
int main()
{
freopen("castle.in","r",stdin);
freopen("castle.out","w",stdout);
int i,j;
scanf("%d%d",&m,&n);
for (i=1; i<=n; ++i)
for (j=1; j<=m; ++j)
{
scanf("%d",&ror);
if (ror>=8) {ror-=8; a[i][j][1]=1;}
if (ror>=4) {ror-=4; a[i][j][3]=1;}
if (ror>=2) {ror-=2; a[i][j][0]=1;}
if (ror>=1) {ror-=1; a[i][j][2]=1;}
}
for (i=1; i<=n; ++i)
for (j=1; j<=m; ++j)
if (!b[i][j]) up(i,j);
printf("%d\n%d\n",tot,maxx);
/*
for (i=1; i<=n; ++i)
{
for (j=1; j<=m; ++j) printf("%d",c[i][j]);
printf("\n");
}
*/
for (j=1; j<=m; ++j)
for (i=n; i>=1; --i)
{
for (int l=0; l<4; ++l)
{
int xx=i+dx[l],yy=j+dy[l];
if (d[xx][yy]!=d[i][j] && maxs<c[i][j]+c[xx][yy])
{
maxs=c[i][j]+c[xx][yy];
tx=i; ty=j; tz=dz[l];
}
}
}
printf("%d\n",maxs);
printf("%d %d %c\n",tx,ty,tz);
return 0;
}