记录编号 |
112243 |
评测结果 |
AAAAAAAW |
题目名称 |
城堡 |
最终得分 |
87 |
用户昵称 |
Satoshi |
是否通过 |
未通过 |
代码语言 |
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;
}