记录编号 23684 评测结果 AAAAAAAA
题目名称 求图形面积 最终得分 100
用户昵称 Gravatar苏轼 是否通过 通过
代码语言 C++ 运行时间 0.067 s
提交时间 2011-03-17 13:11:53 内存使用 0.26 MiB
显示代码纯文本
#include <fstream>
#include <cstdlib>

using namespace std;

int A, B, N;
int pp[31][31];
bool boo[31][31];

int floodfill (const int x, const int y)
{
	int ans = 0;

	boo[x][y] = true;

	if (x && pp[x][y] == pp[x-1][y] && !boo[x-1][y])
		ans += floodfill(x-1, y);
	if (y && pp[x][y] == pp[x][y-1] && !boo[x][y-1])
		ans += floodfill(x, y-1);
	if (pp[x][y] == pp[x+1][y] && !boo[x+1][y])
		ans += floodfill(x+1, y);
	if (pp[x][y] == pp[x][y+1] && !boo[x][y+1])
		ans += floodfill(x, y+1);
	if (x && y && pp[x][y] == pp[x-1][y-1] && !boo[x-1][y-1])
		ans += floodfill(x-1, y-1);
	if (x && pp[x][y] == pp[x-1][y+1] && !boo[x-1][y+1])
		ans += floodfill(x-1, y+1);
	if (y && pp[x][y] == pp[x+1][y-1] && !boo[x+1][y-1])
		ans += floodfill(x+1, y-1);
	if (pp[x][y] == pp[x+1][y+1] && !boo[x+1][y+1])
		ans += floodfill(x+1, y+1);

	return ans + 1;
}

int main ()
{
	ifstream fin("area.in");
	ofstream fout("area.out");

	fin >> A >> B >> N;

	for (int i=0; i<A; i++)
		for (int j=0; j<B; j++)
			pp[i][j] = 1;

	int offx = A/2, offy = B/2, maxcolor = 0;
	for (int i=0; i<N; i++)
	{
		int x1, y1, x2, y2, color;
		fin >> x1 >> y1 >> x2 >> y2 >> color;

		for (int xx=x1+offx; xx<x2+offx; xx++)
			for (int yy=y1+offy; yy<y2+offy; yy++)
				pp[xx][yy] = color;

		if (color > maxcolor)
			maxcolor = color;
	}

	for (int color=1; color<=maxcolor; color++)
		for (int xx=0; xx<A; xx++)
			for (int yy=0; yy<B; yy++)
				if (pp[xx][yy] == color  &&  !boo[xx][yy])
					fout << color << ' ' << floodfill(xx, yy) << endl;

	fin.close();
	fout.close();

	return 0;
}