记录编号 |
23684 |
评测结果 |
AAAAAAAA |
题目名称 |
求图形面积 |
最终得分 |
100 |
用户昵称 |
苏轼 |
是否通过 |
通过 |
代码语言 |
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;
}