记录编号 326318 评测结果 AAAAAAAA
题目名称 城堡 最终得分 100
用户昵称 Gravatar浮生随想 是否通过 通过
代码语言 C++ 运行时间 0.078 s
提交时间 2016-10-21 07:20:50 内存使用 0.25 MiB
显示代码纯文本
#include <iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[55][55],ans1,T;
int n,m,ax,ay;
char dir;
int f[55][55];
int dfs(int x,int y){
	if(f[x][y]==T) return 0;
	if(x<=0||y<=0||x>m||y>n)return 0;
	f[x][y]=T;
	int k=a[x][y],sum=1;
	if(!(k&8))sum+=dfs(x+1,y);
	if(!(k&4))sum+=dfs(x,y+1);
	if(!(k&2))sum+=dfs(x-1,y);
	if(!(k&1))sum+=dfs(x,y-1);
	return sum;
}
int main(){
	freopen("castle.in","r",stdin);
	freopen("castle.out","w",stdout);
	memset(f,0,sizeof f);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);
	int sum=0,ans=0,x=0;
	T++;
	for(int i=1; i<=m; i++)
	for(int j=1;j<=n;j++)
	if(f[i][j]!=T){
		sum++;
		x=dfs(i,j);
		ans=max(ans,x);	
	}
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++){
		T++;		
		if(a[i][j]&2){
			a[i][j]^=2;
			x=dfs(i,j);
			if(x>ans1)ax=i,ay=j,dir='N',ans1=x;
			else if(x==ans1){
				if(ay>j)
				ax=i,ay=j,dir='N';
				else if(ay==j&&ax<i)
				ax=i,ay=j,dir='N';
			}
			a[i][j]^=2;
		}
		T++;
		if(a[i][j]&4){
			a[i][j]^=4;
			x=dfs(i,j);
			if(x>ans1)ax=i,ay=j,dir='E',ans1=x;
			else if(x==ans1){
				if(ay>j)
				ax=i,ay=j,dir='E';
				else if(ay==j&&ax<i)
				ax=i,ay=j,dir='E';
			}
			a[i][j]^=4;
		}
	}
	printf("%d\n%d\n%d\n%d %d %c",sum,ans,ans1,ax,ay,dir);
	//while(1);
	return 0;
}