#GOC80117. 城堡

城堡

题目描述

以一个几乎超乎想像的运气,农民约翰在他的生日收到了一张爱尔兰博彩的奖券.这一张奖券成为

了唯一中奖的奖券.农民约翰嬴得爱尔兰的乡下地方的一个传说中的城堡.

吹牛在他们威斯康辛州不算什么,农民约翰想告诉他的牛所有有关城堡的事.他想知道城堡有多少

房间,而且最大的房间有多大.事实上,他想去掉一面墙来制造一个更大的房间.

你的任务是帮助农民约翰去了解正确房间数目和大小.城堡的平面图被分为 M(wide)*N(1 <=M,N<=50)个小正方形.

每个这样的小正方形有0到4 面墙.城堡在它的外部边缘总是有墙壁的,好遮挡风雨.

考虑这注解了一个城堡的平面图:

1 2 3 4 5 6 7

#############################

1 # | # | # | | #

#####---#####---#---#####---#

2 # # | # # # # #

#---#####---#####---#####---#

3 # | | # # # # #

#---#########---#####---#---#

4 # -># | | | | # #

#############################

# =墙壁 -, | = 没有墙壁

-> =移除这面墙能使得到的新房间最大

例子的城堡的大小是 7 x 4.

一个 "房间"是平面图上有连接的"小正方形"的集合.

这个平面图包含五个房间.(它们的大小是 9,7,3,1, 和 8 排列没有特别的顺序).

移除被箭作记号的墙壁来合并两个房间来制造最大的可能房间(移除一面墙所能产生的).

城堡总是至少有二个房间并且总是有一面墙壁以可能被移除.

PROGRAM NAME: castle

INPUT FORMAT

地图以一个表格来储存,每个数字描述一个小正方形,N 行每行 M 个数来描述这个平面图.

输入顺序符合那个在上面例子的编号方式.

每个描述小正方形的数字说明小正方形的四面的墙的分布情况,它是下面 4 个数的和:

1: 在西面有墙

2: 在北面有墙

214: 在东面有墙

8: 在南面有墙

内部的墙壁是会被定义两次;小正方形(1,1)南面的墙也被指出是小正方形(2,1)北面的墙.

第 1 行: 二个被空格分开的整数: M 和 N

第 2 到: N+1 行: M x N 个整数,每行 M 个.

SAMPLE INPUT (file castle.in)

7 4

11 6 11 6 3 10 6

7 9 6 13 5 15 5

1 10 12 7 13 7 5

13 11 10 8 10 12 13

OUTPUT FORMAT

输出包含一些行:

第 1 行: 城堡的房间数目.

第 2 行: 最大的房间的大小

第 3 行: 移除一面墙能得到的最大的房间的大小

第 4 行: 移除哪面墙

选择最佳的墙来移除,(选择最靠西的,如果仍然不能确定,再选择最靠南的.编者注:墙的位置应该

由它的中点来定义)

墙壁由它在相邻的小正方形的西部或南方来命名

SAMPLE OUTPUT (file castle.out)

5

9

16

4 1 E