记录编号 112243 评测结果 AAAAAAAW
题目名称 城堡 最终得分 87
用户昵称 GravatarSatoshi 是否通过 未通过
代码语言 C++ 运行时间 0.012 s
提交时间 2014-07-15 10:51:45 内存使用 6.36 MiB
显示代码纯文本
#include <fstream>
using namespace std;
int a[51][51],area[51*51]={0},m,n,s[51][51][5],sum=0,sum2=0,y=0,tuo[51][51]={0},k0,k1,k2,k3,k4;bool way[2501][2501]={0},bus=true;
ifstream in("castle.in");
	ofstream out("castle.out");
int dfs(int o,int p)
{
	tuo[o][p]=y;area[y]++;
	if(s[o][p][1]==0&&p-1>=1&&tuo[o][p-1]==0)dfs(o,p-1);
	if(s[o][p][2]==0&&o-1>=1&&tuo[o-1][p]==0)dfs(o-1,p);
	if(s[o][p][3]==0&&p+1<=m&&tuo[o][p+1]==0)dfs(o,p+1);
	if(s[o][p][4]==0&&o+1<=n&&tuo[o+1][p]==0)dfs(o+1,p);
	return 0;
}
int main()
{
	int i,j,k,o1,o2,o3,o4,max=0,max1=0,max2=0;
	in>>m>>n;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
		{
			in>>a[i][j];
			tuo[i][j]=0;
	        for(o1=0;o1<=1;o1++)for(o2=0;o2<=1;o2++)for(o3=0;o3<=1;o3++)for(o4=0;o4<=1;o4++)
			{
				if(o1+2*o2+4*o3+8*o4==a[i][j])
				{
					s[i][j][1]=o1;
					s[i][j][2]=o2;
					s[i][j][3]=o3;
					s[i][j][4]=o4;
				}
		    }
		}
    for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
		{
			if(tuo[i][j]==0)
			{
				y++;
				dfs(i,j);
				if(area[y]>max)max=area[y];
			}
		}
	out<<y<<endl;
	out<<max<<endl;
	for(i=n;i>=1;i--)
		for(j=1;j<=m;j++)
		{
			k0=tuo[i][j];
			k1=tuo[i][j+1];
			k2=tuo[i][j-1];
			k3=tuo[i+1][j];
			k4=tuo[i-1][j];
			/*dong*/if(k0!=k1&&j!=m)way[k0][k1]=1;
			/*xi*/  if(k0!=k2&&j!=1)way[k0][k2]=1;
			/*nan*/ if(k0!=k3&&i!=n)way[k0][k3]=1;
			/*bei*/ if(k0!=k4&&i!=1)way[k0][k4]=1;
		}
		max=0;
	for(i=1;i<=y;i++)
	{
		for(j=1;j<=y;j++)
		{
			if(way[i][j])
			{
				if(area[i]+area[j]>max)
				{
					max1=i;
					max2=j;
					max=area[i]+area[j];
				}
			}
		}
	}
	out<<max<<endl;
	if(area[y]!=1)
	{
	for(i=n;i>=1;i--)
	{
		if(bus==0)break;
		for(j=1;j<=m;j++)
		{
			k0=tuo[i][j];
			k1=tuo[i][j+1];
			k2=tuo[i][j-1];
			k3=tuo[i+1][j];
			k4=tuo[i-1][j];
			/*xi*/if(j!=1)
			{
				if((k0==max1&&k2==max2)||(k0==max2&&k2==max1))
				{
					out<<i<<' '<<j-1<<' '<<'E'<<endl;
					bus=false;
					break;
				}
			}
			/*nan*/ if(i!=n)
			{
				if((k0==max1&&k3==max2)||(k0==max2&&k3==max1))
				{
					out<<i+1<<' '<<j<<' '<<'N'<<endl;
					bus=false;
					break;
				}
			}
			/*bei*/ if(i!=1)
			{
				if((k0==max1&&k4==max2)||(k0==max2&&k4==max1))
				{
					out<<i<<' '<<j<<' '<<'N'<<endl;
					bus=false;
					break;
				}
			}
			/*dong*/if(j!=m)
			{
				if((k0==max1&&k1==max2)||(k0==max2&&k1==max1))
				{
					out<<i<<' '<<j<<' '<<'E'<<endl;
					bus=false;
					break;
				}
			}
		}
	}
	}
	else 
	{
		if(n==50)out<<n<<' '<<1<<' '<<'N'<<endl;
		if(n==1)out<<n<<' '<<1<<' '<<'E'<<endl;
	}
    in.close();
	out.close();
	return 0;
}