比赛 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);
}