比赛 10101115 评测结果 WWWWWTTTTT
题目名称 牛宫 最终得分 0
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-11-15 09:12:07
显示代码纯文本
#include <fstream>

#define I_F "long.in"
#define O_F "long.out"
#define MAX 200

using namespace std;

short n,m;
int map[MAX][MAX];
long sum[MAX][MAX];
int ans;

void Input();
void Get_sum();
long Get_height(short x1, short y1, short x2, short y2);
void Search();
void Output();

int main()
{
	Input();
	Get_sum();
	Search();
	Output();
	return 0;
}

void Input()
{
	ifstream fin(I_F);
	fin>>n>>m;
	short i,j;
	for (i=0; i<n; i++)
		for (j=0; j<m; fin>>map[i][j++]);
	fin.close();
}

void Get_sum()
{
	short i,j;
	sum[0][0]=map[0][0];
	for (i=1; i<n; i++)
		sum[i][0]=sum[i-1][0]+map[i][0];
	for (j=1; j<m; j++)
		sum[0][j]=sum[0][j-1]+map[0][j];
	for (i=1; i<n; i++)
		for (j=1; j<m; j++)
			sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+map[i][j];
}

long Get_height(short x1, short y1, short x2, short y2)
{
	long t=sum[x2][y2];
	if (x1>0)
		t-=sum[x1-1][y2];
	if (y1>0)
		t-=sum[x2][y1-1];
	if ((x1>0)&&(y1>0))
		t+=sum[x1-1][y1-1];
	return t;
}

void Search()
{
	short i,j,k,l;
	for (i=0; i<n; i++)
		for (j=0; j<m; j++)
			for (k=i; k<n; k++)
				for (l=j; l<m; l++)
					if (((k-i+1)*(l-j+1)>ans)&&(Get_height(i,j,k,l)>0))
						ans=(k-i+1)*(l-j+1);
}

void Output()
{
	ofstream fout(O_F);
	fout<<ans<<'\n';
	fout.close();
}