比赛 |
20140714下午练习 |
评测结果 |
AAAAAAAA |
题目名称 |
城堡 |
最终得分 |
100 |
用户昵称 |
努力吧 |
运行时间 |
0.003 s |
代码语言 |
C++ |
内存使用 |
0.34 MiB |
提交时间 |
2014-07-14 15:33:37 |
显示代码纯文本
#include<fstream>
#include<iostream>
using namespace std;
unsigned short int map[52][52]={0};
int mp[52][52]={0},bg[2503]={0};
int m,n,k=0,d=0,endb=0;
void go(int x,int y);
int main()
{
ifstream fi("castle.in");
ofstream fo("castle.out");
fi>>m>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
fi>>map[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(!mp[i][j])
{
k++;
go(i,j);
if(bg[k]>endb)
endb=bg[k];
}
int endc=0,endx=0,endy=0;
char endf;
for(int j=1;j<=m;j++)
for(int i=n;i>=1;i--)
{
if((map[i][j]&2)&&mp[i][j]!=mp[i-1][j])
if(bg[mp[i][j]]+bg[mp[i-1][j]]>endc)
{
endc=bg[mp[i][j]]+bg[mp[i-1][j]];
endx=i;
endy=j;
endf='N';
}
if((map[i][j]&4)&&mp[i][j]!=mp[i][j+1])
if(bg[mp[i][j]]+bg[mp[i][j+1]]>endc)
{
endc=bg[mp[i][j]]+bg[mp[i][j+1]];
endx=i;
endy=j;
endf='E';
}
}
fo<<k<<endl<<endb<<endl<<endc<<endl<<endx<<' '<<endy<<' '<<endf<<endl;
fi.close();
fo.close();
return 0;
}
void go(int x,int y)
{
mp[x][y]=k;
bg[k]++;
if(!(map[x][y]&1)&&y-1>0&&!mp[x][y-1])
go(x,y-1);
if(!(map[x][y]&2)&&x-1>0&&!mp[x-1][y])
go(x-1,y);
if(!(map[x][y]&4)&&y+1<=m&&!mp[x][y+1])
go(x,y+1);
if(!(map[x][y]&8)&&x+1<=n&&!mp[x+1][y])
go(x+1,y);
}